1、Taurus.MVC WebAPI 入門開發教學1:框架下載環境設定與執行。
2、Taurus.MVC WebAPI 入門開發教學2:新增控制器輸出Hello World。
3、Taurus.MVC WebAPI 入門開發教學3:路由型別和路由對映。
4、Taurus.MVC WebAPI 入門開發教學4:控制器方法及引數定義、獲取及基礎校驗屬性【Require】。
5、Taurus.MVC WebAPI 入門開發教學5:控制器安全校驗屬性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。
6、Taurus.MVC WebAPI 入門開發教學6:全域性控制器DefaultController與全域性事件。
7、Taurus.MVC WebAPI 入門開發教學7:業務邏輯基礎類別LogicBase的使用。
8、Taurus.MVC WebAPI 入門開發教學8:WebAPI檔案與自動化測試。
後續還有兩個系列:
1、Taurus.MVC 微服務 入門開發教學系列。
2、Taurus.MVC Web應用 入門開發教學系列。
本篇講述進一步的控制器和路由規則。
一共有3類:預設為1。
設定模式【值為0,1或2】[預設為1] 值為0:匹配{Action}/{Para} 值為1:匹配{Controller}/{Action}/{Para} 值為2:匹配{Module}/{Controller}/{Action}/{Para}
可以通過設定來切換型別:
web.config 設定:
<?xml version="1.0"?> <configuration> <appSettings> <add key="Taurus.RouteMode" value="1"/> </appSettings> </configuration>
appsettings.json 設定:
{ "AppSettings": {"Taurus.RouteMode": 1 } }
下面對三種型別做進一步講解:
如果規則設定為0,則所有請求轉入全域性DefaultController,這是一個全域性的控制器,後續會有一篇專門講它。
根據規則,存取:
對不上規則的,還是同樣404,根據上一篇,同理,可以通過過載Default,獲得404的 攔截:
public partial class DefaultController : Controller { public void Hello() { Write("Default : Hello " + Para); } public override void Default() { Write("Hello world"); } }
攔截後,任意之前404的請求都跑到Default中,並輸出:
注意事項:
控制器的名稱是唯一的,同一個專案中不應該出現相同的控制器名稱。
如果出現,是執行哪一個控制器呢?如果想知道,請理解以下的文字:
按控制器的上一級名稱空間字串比較,取最小值的為預設控制器:
如:名稱空間:XXX.YYY.A.Controller與XX.YY.ZZ.B.Controller
這裡僅比較A和B,A靠前,所以取A的為預設。
定址規則:通過請求路徑匹配控制器,如果匹配不到,則轉到DefaultController(全域性),若全域性控制器也不在,則返回錯誤結果。
說明事項:控制器的名稱可以不唯一,存在多個不同的名稱空間下:
//匹配路徑:/test/hello/...
namespace Taurus.Controllers.Test { public class HelloController : Taurus.Core.Controller {public void World() { Write("Test.Hello World"); } } }
//匹配路徑:/a/hello/...
namespace Taurus.Controllers.A
{
public class HelloController : Taurus.Core.Controller
{
public void World()
{
Write("A.Hello World");
}
}
}
如:
/test/hello/world 則匹配輸出:Test.Hello World
/a/hello/world 則匹配輸出:A.Hello Wrold
對於不匹配module的,則由控制器上一級名稱空間字串取最值小(Test.HelloController和A.HelloController比較)的做為預設處理程式。
如:
/xxx/hello/world 則匹配輸出:A.Hello Wrold
/v1/hello/world
/v2/hello/world
路由對映,是在全域性DefaultController中處理的,DefaultController有好幾個全域性事件,此處只講路由對映相關的:
/// <summary> /// 全域性控制器(適全全域性事件處理) /// </summary> public class DefaultController : Taurus.Core.Controller { /// <summary> /// 全域性【路由對映】 /// 啟用時:所有請求都進入此地做對映。 /// </summary> public static string RouteMapInvoke(HttpRequest request) { if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2) { return "/test" + request.RawUrl; } return string.Empty; } }
說明,通過request拿到當前請求,根據條件處理,返回需要對映的路徑即可,不對映的地址返回空值即可。
本篇講述了路由的幾種型別和一些細節和全域性的對映處理方法,下一篇,講述控制器更進一步的相關資訊。
版權宣告:本文原創發表於 部落格園,作者為 路過秋天 本文歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則視為侵權。 |
個人微信公眾號 |
創業QQ群:617713515 |
Donation(掃碼支援作者):支付寶: |
Donation(掃碼支援作者):微信: |