国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

為ASP.NET MVC及WebApi添加路由優(yōu)先級

2024-07-10 12:47:43
字體:
供稿:網(wǎng)友

一、為什么需要路由優(yōu)先級

大家都知道我們在Asp.Net MVC項目或WebApi項目中注冊路由是沒有優(yōu)先級的,當項目比較大、或有多個區(qū)域、或多個Web項目、或采用插件式框架開發(fā)時,我們的路由注冊很可能 不是寫在一個文件中的,而是分散在很多不同項目的文件中,這樣一來,路由的優(yōu)先級的問題就突顯出來了。

比如: App_Start/RouteConfig.cs中

routes.MapRoute(   name: "Default",   url: "{controller}/{action}/{id}",   defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );  Areas/Admin/AdminAreaRegistration.cs中  context.MapRoute(   name: "Login",    url: "login",   defaults: new { area = "Admin", controller = "Account", action = "Login", id = UrlParameter.Optional },   namespaces: new string[] { "Wenku.Admin.Controllers" } ); 

假如是先注冊上面那個通用的default路由,再注冊這個login的路由,那么無論怎么樣,都會先匹配第一個滿足條件的路由,也就是第兩個路由注冊是無效的。
造成這個問題的原因就是這兩個路由注冊的順序問題,而Asp.Net MVC及WebApi中注冊路由都沒有優(yōu)先級這個概念,所以今天我們就是要自己實現(xiàn)這個想法,在注冊路由時加入一個優(yōu)先級的概念。

二、解決思路

1、先分析路由注冊的入口,比如我們新建一個mvc4.0的項目

public class MvcApplication : System.Web.HttpApplication {   protected void Application_Start()   {     AreaRegistration.RegisterAllAreas();      WebApiConfig.Register(GlobalConfiguration.Configuration);     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);     RouteConfig.RegisterRoutes(RouteTable.Routes);   } } 

Mvc路由的注冊入口有兩個:
a. AreaRegistration.RegisterAllAreas();                                    注冊區(qū)域路由
b. RouteConfig.RegisterRoutes(RouteTable.Routes);          注冊項目路由

WebApi路由注冊入口有一個:
WebApiConfig.Register(GlobalConfiguration.Configuration);  注冊WebApi路由

2、注冊路由的處理類分析

AreaRegistrationContext
RouteCollection
HttpRouteCollection

注冊路由時主要是由這三個類來注冊處理路由的。

3、路由優(yōu)先級方案

a、更改路由的注冊入口
b、自定義一個路由的結(jié)構(gòu)類RoutePriority及HttpRoutePriority,這兩個類下面都有Priority這個屬性
c、自定一個RegistrationContext來注冊路由,注冊的對象為上述自定義路由。
d、所有的路由注冊完成之后再按優(yōu)先順序添加到RouteCollection及HttpRouteCollection中實際生效。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 开封市| 博乐市| 永康市| 武定县| 普宁市| 淳安县| 合山市| 崇信县| 周口市| 屏南县| 湄潭县| 郑州市| 泉州市| 古田县| 沛县| 阿鲁科尔沁旗| 白山市| 稷山县| 宁夏| 承德县| 平遥县| 顺平县| 北辰区| 内江市| 车致| 从江县| 方山县| 伊金霍洛旗| 河北区| 名山县| 十堰市| 青州市| 玉屏| 会昌县| 宝清县| 察哈| 孙吴县| 和林格尔县| 明溪县| 南靖县| 无极县|