获取不带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}/

谢谢。

获取不带url参数的MVC路由路径

您只对控制器和操作名称感兴趣吗?

如果是,请使用控制器的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。