我怎样才能得到一个相对URL的控制器名称,用我在Global.asax中定义的路线?
例:
如果我有一个路线defiend是这样的:
routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "", language = "en" }
从字符串“〜/ EN /产品/列表”我想对我们的产品(控制器名称)。 有没有已经这样做了任何现有的方法?
见斯蒂芬·瓦尔特的博客文章ASP.NET MVC提示#13 -单元测试您的自定义路线
该项目MvcFakes有一个老System.Web.Abstractions参考。 所以,你必须用新的替换它并recomply项目获得MvcFakes.dll。
这是我的代码:
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();
}
在我上面的代码“MvcApplication”是在Global.asax类名。
祝好运 !
你或许应该增加另一个路线像乔治建议,但如果你真的只需要从您可以在您的控制器操作方法做到这一点的途径获得的控制值:
var controller = (string)RouteData.Values["controller"];
我不知道你问什么,所以如果我的答案是错的,那是因为我在你想要的猜测。
您可以随时另一路由添加到您的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
可能它有一个错误。
文章来源: ASP.NET-MVC . How to get the controller name from an url?