asp.net-mvc – 在ASP.Net中路由保留字

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 在ASP.Net中路由保留字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个遗留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;
}
原文链接:https://www.f2er.com/aspnet/251592.html

猜你在找的asp.Net相关文章