Taurus.MVC WebAPI 入門開發教程6:全局控制器DefaultController與全局事件。

系列目錄

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、全局攔截404的方法補充說明:

通過全局攔截後,默認會變成自定義方式:

1、正常處理流程,輸出的狀態碼爲200,如果需要返回404狀態碼,設置輸出的狀態碼即可,如:

        public override void Default()
        {
            Response.StatusCode = 404;
            Write("DefaultController : Hello world");
        }

2、如果想返回自定義頁面,有兩種方式:

1、直接讀取文件路徑,然後Write出去即可。

2、利用小技巧,讓它直接觸發MVC的頁面加載機制即可,按路徑存放頁面即可:/Views/Default/Default.html。

其它2、全局方法的效用補充說明:

 在一個系統中,後續會有一些邊緣需求,比如:

1、加強安全校驗;

2、方法調用次數的統計;

3、請求日誌的記錄

4、......

都可以在全局方法中自由發揮,比如在方法結束後:

收集請求參數或處理結果,放置到全局隊列中,開個線程在全局定時掃描處理等。

總結:

DefaultController的名字是約定好的,用處也比較實在,一般項目都會用到它。

具體各方法的執行順序,可以看該方法上的註釋。

下一篇介紹:業務邏輯基類LogicBase的使用,還有兩篇,將轉入微服務系列教程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章