我有一个遗留URL,我希望映射到我的ASP.Net MVC应用程序中的路由
e.g. http://my.domain.com/article/?action=detail&item=22
现在在路线创建动作中有一个特殊含义所以我创建这条路线?控制器是RedirectController,操作是Item.
routes.MapRoute( name: "Redirect",url: "article",defaults:new { controller = "redirect",action = "item"} );
解决方法
控制器,动作和区域是asp.net MVC中唯一的保留字. “保留”意味着MVC赋予它们特殊的含义,特别是对于路由.
还有其他单词(COM1-9,LPT1-9,AUX,PRT,NUL,CON),不是特定于asp.net,而不是在url中.这解释了为什么here以及如何绕过here.
编辑:
没有办法使用它们,因为asp.net mvc在路由数据中依赖它们.
以下是从UrlHelper获取的反编译示例:
// System.Web.Mvc.RouteValuesHelpers public static RouteValueDictionary MergeRouteValues(string actionName,string controllerName,RouteValueDictionary implicitRouteValues,RouteValueDictionary routeValues,bool includeImplicitMvcValues) { RouteValueDictionary routeValueDictionary = new RouteValueDictionary(); if (includeImplicitMvcValues) { object value; if (implicitRouteValues != null && implicitRouteValues.TryGetValue("action",out value)) { routeValueDictionary["action"] = value; } if (implicitRouteValues != null && implicitRouteValues.TryGetValue("controller",out value)) { routeValueDictionary["controller"] = value; } } if (routeValues != null) { foreach (KeyValuePair<string,object> current in RouteValuesHelpers.GetRouteValues(routeValues)) { routeValueDictionary[current.Key] = current.Value; } } if (actionName != null) { routeValueDictionary["action"] = actionName; } if (controllerName != null) { routeValueDictionary["controller"] = controllerName; } return routeValueDictionary; }