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

Gre*_*ire 5 asp.net-mvc asp.net-mvc-routing

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

例:

如果我有这样的路线违规:

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

从字符串"〜/ en/products/list"我想要产品(控制器名称).有没有现成的方法已经这样做了?

Joh*_*han 6

您可能应该添加另一条路径,例如George建议但如果您真的需要从路由派生的控制器值,您可以在控制器操作方法中执行此操作:

var controller = (string)RouteData.Values["controller"];
Run Code Online (Sandbox Code Playgroud)

  • 我如何从任意URL获取控制器名称,而不是从RouteData获取? (2认同)

Lau*_*.Wu 4

请参阅 Stephen Walther 的博客文章ASP.NET MVC Tip #13 \xe2\x80\x93 对自定义路由进行单元测试

\n\n

MvcFakes 项目有一个旧的 System.Web.Abstractions 参考。因此,您必须将其替换为新的\n并重新编译该项目以获取 MvcFakes.dll。

\n\n

这是我的代码:

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

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

\n\n

祝你好运 !

\n