ASP.NET Web API 路由

來源:互聯網
上載者:User

標籤:

路由系統是請求訊息進入ASP.NET Web API訊息處理管道的第一道屏障,其根本目的是利用註冊的路由表(RouteTable)對請求的URI進行解析以確定目標HttpController和Action的名稱,以及與目標Action方法某個參數進行綁定的路由變數。

ASP.NET Web API架構是一個獨立於傳輸層的抽象訊息處理管道,其本身並不具有傳輸協議的偵聽、接收和響應能力。
WebHost和SelfHost這兩種典型的寄宿模式採用兩種截然不同的機制實現了ASP.NET Web API路由系統的適配。

ASP.NET Web API 包含路由系統在內的核心架構是一個獨立於寄宿環境的訊息處理管道,這是為什麼它能支援多種不同寄宿模式的根源所在。服務寄宿的目的在於提供一個運行環境以監聽並接收來自外界的請求,並將請求適當加工後遞交給這個抽象的訊息處理管道進行處理,最後將管道處理後產生的響應利用網路傳輸返回給用戶端。對於WebHost來說,真正的路由功能是由ASP.NET自身的路由系統來完成的。ASP.NET MVC的路由完全是由ASP.NET路由系統來完成的,但後者並非專門為MVC而設計,其實它最初是為了協助Web Forms應用實現“請求地址與物理檔案的分離”而設計的。

一個簡單的例子來註冊ASP.NET路由映射

這個Route的註冊包括了:映射URI各段(Segment)的預設值,值的約束以及其它一些附加資料。

 1 using System; 2 using System.Web; 3 using System.Web.Routing; 4  5 namespace WebHost 6 { 7     public class Global : HttpApplication 8     { 9         protected void Application_Start(object sender, EventArgs e)10         {11             // 設定路由映射URI各段的預設值12             var defaults = new RouteValueDictionary13             {14                 {"areacode", "010"}15             };16 17             // 設定值的約束18             var constrains = new RouteValueDictionary19             {20                 {"areacode", @"0\d{2,3}"},21                 {"days", @"[1-3]"}22             };23             24             // 設定附加資料25             var dataTokens = new RouteValueDictionary26             {27                 {"defaultCity", "BeiJing"},28                 {"defaultDays", "2"}29             };30             31             // 在路由表中註冊路由(Friendly URL與物理檔案分離)32             RouteTable.Routes.MapPageRoute("default", "{areacode}/{days}", "~/weather.aspx", false, defaults, constrains, dataTokens);33         }34     }35 }

寫一個WebForm頁面來呈現上述的各種路由資料

 1 using System; 2 using System.Web.UI; 3  4 namespace WebHost 5 { 6     public partial class Weather : Page 7     { 8         protected void Page_Load(object sender, EventArgs e) 9         {10             if (!IsPostBack)11             {12                 if (RouteData.Route != null)13                 {14                     Response.Write(RouteData.Route.GetType().FullName);15                     Response.Write("<br/>");16                 }17                 if (RouteData.RouteHandler != null)18                 {19                     Response.Write(RouteData.RouteHandler.GetType().FullName);20                     Response.Write("<br/>");21                 }22                 Response.Write("<b>RouteData Values:</b></br>");23                 foreach (var variable in RouteData.Values)24                 {25                     Response.Write($"<li>{variable.Key}={variable.Value}</li>");26                 }27                 Response.Write("<b>RouteData DataTokens:</b>");28                 foreach (var variable in RouteData.DataTokens)29                 {30                     Response.Write($"<li>{variable.Key} = {variable.Value}</li>");31                 }32             }33         }34     }35 }

運行結果

ASP.NET Web API 路由

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.