首頁  >  問答  >  主體

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 中如何對應這種路徑? ? ?

为情所困为情所困2688 天前530

全部回覆(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
  • 取消回覆