代码之家  ›  专栏  ›  技术社区  ›  Gregoire

ASP.NET-MVC。如何从url获取控制器名称?

  •  5
  • Gregoire  · 技术社区  · 16 年前

    如何使用我在Global.asax中定义的路由获取相对Url的控制器名称?

    例子:

    routes.MapRoute(
                    "Default",                                              // Route name
                    "{language}/{controller}/{action}/{id}",                 // URL with parameters
                    new { controller = "Home", action = "Index", id = "", language = "en" }
    

    从字符串“~/en/products/list”中,我想要产品(控制器名称)。是否有任何现有的方法已经做到了这一点?

    3 回复  |  直到 16 年前
        1
  •  4
  •   sshine    10 年前

    见斯蒂芬·沃尔特的博客文章 ASP.NET MVC Tip #13 – Unit Test Your Custom Routes

    项目MvcFakes有一个旧的System.Web.Abstracts参考。所以你必须更换它

    这是我的代码:

    public string getControllerNameFromUrl()
    {
        RouteCollection rc = new RouteCollection();
        MvcApplication.RegisterRoutes(rc);
        System.Web.Routing.RouteData rd = new RouteData();
        var context = new FakeHttpContext("\\" + HttpContext.Request.Url.AbsolutePath);
        rd = rc.GetRouteData(context);
        return rd.Values["action"].ToString();
    }
    

    在我上面的代码中,“mvcapapplication”是Global.asax中的类名。

        2
  •  7
  •   John Sheehan    16 年前

    var controller = (string)RouteData.Values["controller"];
    
        3
  •  1
  •   George Stocker NotMe    16 年前

    我不知道你在问什么,所以如果我的答案是错的,那是因为我在猜测你想要什么。

    您始终可以将另一条路线添加到 Global.asax . 这通常是处理“异常”案件的最简单方法。

    如果要返回产品列表,请使用以下路径:

    routes.MapRoute(
                "ProductList",         
                "{language}/{products}/{action}/",
                new { controller = "Products", action = "List", language = "en" });
    

    您还可以用更通用的产品替换产品 {controller}

    例如,要使其成为可用于获取任何产品列表的通用路径,请执行以下操作:

    routes.MapRoute(
                "ProductList",         
                "{language}/{controller}/{action}/",
                new { controller = "Products", action = "List", language = "en" });
    

    这样做的目的是创建一条路线(您应该始终将其放置在 Default 路由)表示,“无论用户输入什么,请给我他们要求的控制器和操作”(比如 /en/Products/List /en/Users/List

    要访问该控制器,只需导航到以下位置: yoursite.com/en/products/list . 您也可以使用 HTMLActionLink 访问控制器。

    <%=Html.ActionLink("Product", "List", new { controller = Products }, null ) %>

    我写这篇文章时没有打开IDE,所以 ActionLink

    推荐文章