登录

asp.net-mvc - asp.net mvc 中路由该怎么做?

asp.net mvc 中一般是

controller/action/参数

的地址形式

但是大多数时候,网站的地址不是这样的路径

如:

xxxx.com/asp.net/
xxxx.com/asp.net/mvc/
xxxx.com/asp.net/webform/
xxxx.com/asp.net/ado.net/

xxxx.com/javascript/
xxxx.com/javascript/jquery/
xxxx.com/javascript/angularjs/
xxxx.com/javascript/jichu/

xxxx.com/jiaoyu/

这时候,地址就不是 controller/action/参数 的形式

不知道 asp.net mvc 中如何映射这种路径???

# PHP
为情所困 为情所困 2530 天前 435 次浏览

全部回复(1) 我要回复

  • 阿神

    阿神2017-05-16 17:08:19

    这个要看你的路由规则如何定义以及路由的定义顺序。
    假如这个请求进入到ASP.NET管道模型中,它就会去到预先定义的路由中去执行匹配,遇到第一个匹配的路由,就直接将这个路由结果返回了。
    比如默认的路由的第一个路由规则是:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Admin", action = "Login", id = UrlParameter.Optional }
        );
    

    xxxx.com/asp.net/ 将匹配这条路由规则,controller="asp.net",action="Login";
    xxxx.com/asp.net/mvc/ 也将匹配这条路由规则,controller="asp.net",action="mvc";

    假如说你另外定义了一条路由规则,而且这条路由规则在刚才那条路由规则前面:

        routes.MapRoute(
            name: "asp.net",
            url: "asp.net/{controller}/{action}/{id}",
            defaults: new { controller = "User", action = "Link", id = UrlParameter.Optional }
        );
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Admin", action = "Login", id = UrlParameter.Optional }
        );
    

    xxxx.com/asp.net/ 将匹配这条路由规则,controller="User",action="Link";
    但是xxxx.com/cast/将不匹配第一条路由规则,而继续用第二条路由规则匹配,这时就会匹配成功,controller="cast", action="Login"

    建议可以看下《精通ASP.NET MVC3框架》这本书,第11章路由规则有该问题的分析介绍。

    回复
    0
  • 取消 回复 发送