在我的MVC4项目中,我有一个网址http://domain.com/ {controller} / {action} /。
要确定用户访问的页面并获取当前活动的菜单项,我使用这样的网址路径HttpContext.Request.Url.AbsolutePath.ToLower()
但在某些情况下,路径为 / {controller} / {action} / {id} 等,实际上 / {controller} / {action} /?{id} =值
如果路由规则覆盖了 / {{controller} / {action} / ,如果它们被路由规则覆盖,我如何才能获得参数?
谢谢。
答案 0 :(得分:2)
您是否只对控制器和操作名称感兴趣?
如果是,请使用控制器的RouteData属性。
你可以像这样使用它:
public ActionResult Index()
{
var controller = this.RouteData.Values["controller"];
var action = this.RouteData.Values["action"];
}
答案 1 :(得分:0)
如何在当前路线之前添加一条新路线,如下所示。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
新路线将是这样的 -
routes.MapRoute(
name: "**Withoutparam**",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
请注意,您需要在RouteConfig.cs 中的当前路线之前添加此路线。这是因为MVC从头到尾开始在RouteConfig文件中搜索路由。一旦找到任何匹配的路线,它将停止进一步搜索。所以对于你的问题,当有没有param的路线时,它会选择" Withoutparam"路由。
我从下面的评论中可以理解。在任何情况下你都需要没有id的url。如果是这样,那么我认为你可以这样做: -
var url = new StringBuilder();
string[] partOfUrl = HttpContext.Request.Url.AbsolutePath.ToLower().split('/');
for(int count = 0; count< (partOfUrl.Length - 1); count++)
{
url.Append(partOfLength[count] + "/")
}
使用url.ToString()作为你想要的url。