我有一个遗留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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。