asp.net-mvc - asp.net mvc 中路由該怎麼做?
为情所困
为情所困 2017-05-16 17:06:19
0
1
578

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

为情所困
为情所困

全部回覆(1)
阿神

這個要看你的路由規則如何定義以及路由的定義順序。
假如這個請求進入到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章路由規則有此問題的分析介紹。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板