获取不带url参数的MVC路由路径
本文关键字:MVC 路由 路径 参数 url 获取 | 更新日期: 2023-09-27 18:25:36
在我的MVC4项目中,我有一个urlhttp://domain.com/{controller}/{action}/。为了确定用户访问的页面并获得当前活动菜单项,我使用类似HttpContext.Request.Url.AbsolutePath.ToLower()
的url路径
然而,在某些情况下,路径是/{controller}/{action}/}id}等,而这些路径实际上是/{controller}/{action}/?{id}=值。
如果路由规则覆盖了参数,如何在没有参数的情况下获得/{controller}/{action}/?
谢谢。
您只对控制器和操作名称感兴趣吗?
如果是,请使用控制器的RouteData属性。
你可以这样使用它:
public ActionResult Index()
{
var controller = this.RouteData.Values["controller"];
var action = this.RouteData.Values["action"];
}
在当前路线之前添加一条新路线如何。
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文件中搜索路由。一旦找到任何匹配的路线,它将停止进一步搜索。因此,对于您的问题,当有没有参数的路由时,它将选择"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。