获取没有url参数的MVC路径路径

时间:2014-10-06 06:22:20

标签: c# .net asp.net-mvc

在我的MVC4项目中,我有一个网址http://domain.com/ {controller} / {action} /。 要确定用户访问的页面并获取当前活动的菜单项,我使用这样的网址路径HttpContext.Request.Url.AbsolutePath.ToLower()

但在某些情况下,路径为 / {controller} / {action} / {id} 等,实际上 / {controller} / {action} /?{id} =值

如果路由规则覆盖了 / {{controller} / {action} / ,如果它们被路由规则覆盖,我如何才能获得参数?

谢谢。

2 个答案:

答案 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。