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應用 入門開發教學系列。
全域性控制器的作用:
1、可接收所有的404請求,做統一處理。 2、可以實現一些公共的全域性的事件。
接收404的過程詳細的描述:
對於Taurus.MVC中執行的請求,如果沒有對應的控制器接收,預設產生404;
如果專案中存在DefaultController全域性控制器,則轉交給DefaultController。
如果DefaultController沒有對應的方法接收,仍產生404。
如果需要對所有的404請求,做統一的處理輸出,則可以過載Default方法,
該方法為最終方法,它可以接收所有的404請求。
下面介紹:全域性控制器中的全域性事件,檔案有點類似以前的Global.cs的味道。
/// <summary> /// 全域性控制器(適全全域性事件處理) /// </summary> public class DefaultController : Taurus.Core.Controller { /// <summary> /// 所有定址不到的請求都集中執行到此方法(不想接收404則刪除此過載方法即可)。 /// </summary> public override void Default() { Write("DefaultController : Hello world"); } /// <summary> /// 用於所有的請求合法性驗證,配合[Ack]屬性 /// 啟用時:區域性的先執行(若存在),無區域性才執行全域性。 /// </summary> public static bool CheckAck(IController controller, string methodName) { //需要自己實現Ack驗證 return !string.IsNullOrEmpty(controller.Query<string>("ack")); } /// <summary> /// 用於需要登陸後的身份驗證,配合[Token]屬性 /// 啟用時:區域性的先執行(若存在),無區域性才執行全域性。 /// </summary> public static bool CheckToken(IController controller, string methodName) { //需要自己實現,或者通過設定Taurus.Auth啟動自帶的驗證(自帶的註釋掉此方法即可)。 return !string.IsNullOrEmpty(controller.Query<string>("token")); } /// <summary> /// 用於校驗微服務的內部身份驗證,配合[MicroService]屬性 /// 啟用時:全域性僅此一個生效,區域性的失效。 /// </summary> public static bool CheckMicroService(IController controller, string methodName) { return MicroService.Config.ServerKey == controller.Query<string>(MicroService.Const.HeaderKey); } /// <summary> /// 全域性【路由對映】 /// 啟用時:所有請求都進入此地做對映(需要對映時,返回對映的地址;不需要對映的返回空即可)。 /// </summary> public static string RouteMapInvoke(HttpRequest request) { //if (request.Url.LocalPath.StartsWith("/api/") && RouteConfig.RouteMode == 2) //{ // return "/test" + request.RawUrl; //} return string.Empty; } /// <summary> /// 全域性【方法執行前攔截】 /// 啟用時:先全域性,再執行區域性(若存在)。 /// </summary> public static bool BeforeInvoke(IController controller, string methodName) { return true; } /// <summary> /// 全域性【方法執行後業務】 /// 啟用時:先執行區域性(若存在),再執行全域性。 /// </summary> public static void EndInvoke(IController controller, string methodName) { } }
全域性方法都是靜態方法,手寫不太方便,對於有全域性控制需要的,可以從此處Copy過去要用到的方法,不需要的忽略或註釋掉。
下面補充其它說明:
通過全域性攔截後,預設會變成自定義方式:
1、正常處理流程,輸出的狀態碼為200,如果需要返回404狀態碼,設定輸出的狀態碼即可,如:
public override void Default() { Response.StatusCode = 404; Write("DefaultController : Hello world"); }
2、如果想返回自定義頁面,有兩種方式:
1、直接讀取檔案路徑,然後Write出去即可。 2、利用小技巧,讓它直接觸發MVC的頁面載入機制即可,按路徑存放頁面即可:/Views/Default/Default.html。
在一個系統中,後續會有一些邊緣需求,比如:
1、加強安全校驗; 2、方法呼叫次數的統計; 3、請求紀錄檔的記錄 4、......
都可以在全域性方法中自由發揮,比如在方法結束後:
收集請求引數或處理結果,放置到全域性佇列中,開個執行緒在全域性定時掃描處理等。
DefaultController的名字是約定好的,用處也比較實在,一般專案都會用到它。
具體各方法的執行順序,可以看該方法上的註釋。
下一篇介紹:業務邏輯基礎類別LogicBase的使用,還有兩篇,將轉入微服務系列教學。
版權宣告:本文原創發表於 部落格園,作者為 路過秋天 本文歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則視為侵權。 |
個人微信公眾號 |
創業QQ群:617713515 |
Donation(掃碼支援作者):支付寶: |
Donation(掃碼支援作者):微信: |