C# 如何通过Routeconfig显示自定义URL

C# 如何通过Routeconfig显示自定义URL,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我有一个HTML的动作链接 <a href="@Url.Action("UserWisedPost", "Blog", new { userName = item.UserName,userId=item.UserId })">@item.UserName</a> 在RouteConfig routes.MapRoute( name: "userwisedPost", url: "{controller}/

我有一个HTML的动作链接

<a href="@Url.Action("UserWisedPost", "Blog", new { userName = item.UserName,userId=item.UserId })">@item.UserName</a>
在RouteConfig

routes.MapRoute(
                name: "userwisedPost",
                url: "{controller}/{action}/{userName}",
                defaults: new { controller = "Blog", action = "UserWisedPost", userName=UrlParameter.Optional}
            );
你可能已经明白我的意思了。我想像
。/UserWisedPost/userName那样显示URL,但希望通过控制器中的
userId
访问数据


我该怎么做

我认为这里的问题是默认路径优先

我猜你在定制路线之前会有这样的情况:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
在此之前,您需要自定义路由,否则这将是处理到
BlogController
的请求的路由

解决这个问题的简单方法如下:

routes.MapRoute(
            name: "userwisedPost",
            url: "Blog/{action}/{userName}",
            defaults: new { controller = "Blog", action = "UserWisedPost", userName = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这将导致这样一个url:
Blog/UserWisedPost/SomeUserName?userId=someUserId

如果您希望将
userId
作为查询字符串以外的内容,则应添加一个表单并将其作为隐藏字段

或者,您可以使用AJAX发布数据:

<a href="postUserWised(@Url.Action("UserWisedPost", "Blog"), @item.UserName,@item.UserId)">@item.UserName</a>

然后在该视图的脚本部分:

@section scripts {
<script type="text/javascript">
   function postUserWised( url, userName, userId) {
      $.ajax({
        url: url,
        type: POST,
        data: { userName: userName, userId: userId },
        success: function(data) { },
        error: function(...) { } 
      });
   }
</script>
}
@节脚本{
函数positionrWised(url、用户名、用户ID){
$.ajax({
url:url,
类型:POST,,
数据:{userName:userName,userId:userId},
成功:函数(数据){},
错误:函数(…){}
});
}
}

我没有对此进行测试,但它应该为您指明了正确的方向。

所以现在您有了这样的东西:
。/UserWisedPost/userName?userId=123
对吗?如果是,问题是什么?您的控制器操作应该只将
用户名
作为输入,然后在操作方法中,您需要一种方法将其转换为
用户ID
。或者,您可以更改您的
\u帖子
,以便能够通过
用户名
获取帖子。但是我们不知道你的后端是如何构造的,所以没有人能给出你的问题的确切答案。我不想显示userid。但在控制器中,我想通过useridI访问数据,我不想在url中显示userid。但在controller中,我希望通过userId访问数据如果要将其作为url参数传递,则需要显示userId。唯一的其他方法是使用表单并发布值。然后他们就不会出现了,但这不是一个锚,而是一个要提交的表单。请参见以下答案:
@section scripts {
<script type="text/javascript">
   function postUserWised( url, userName, userId) {
      $.ajax({
        url: url,
        type: POST,
        data: { userName: userName, userId: userId },
        success: function(data) { },
        error: function(...) { } 
      });
   }
</script>
}