加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:10:04 所属栏目:asp.Net 来源:网络整理
导读:我有一个遗留URL,我希望映射到我的ASP.Net MVC应用程序中的路由 e.g. http://my.domain.com/article/?action=detailitem=22 现在在路线创建动作中有一个特殊含义所以我创建这条路线?控制器是RedirectController,操作是Item. routes.MapRoute( name: "Redire
我有一个遗留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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读