AspNet Core Api Restful +Swagger 實現微服務之旅(四)


這幾天沒更新,項目框架也是在發展階段,這幾天學習配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到時候把心得寫出來相互學習。

接着上一篇的內容

      (2)  程序錯誤時  返回數據格式封裝

      (3)  返回結果包裝

      (4)  對外開放的接口 參數必填與非必填的聲明

   (2)  程序錯誤時  返回數據格式封裝/(3)返回結果包裝

         2.1創建捕獲異常類當有異常發生時自定義返回信息 WebApiException

 public class WebApiException : IExceptionFilter
    {
        /// <summary>
        /// 監控程序錯誤
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            NewMethod(context);
        }
        private static void NewMethod(ExceptionContext context)
        {
            if (context.Exception is Exception)
            {
                var objectResult = context.Exception as Exception;
                if (objectResult.Message != null)
                {
                    context.Result = new ObjectResult(new { Success = false,  msg = "你的程序有誤!" });
                    //寫入日志
                }
            }
        }

    }
View Code

             2.2創建 結果封裝類  WebApiResultMiddleware  返回結果封裝成統一的樣式

   public class WebApiResultMiddleware : ActionFilterAttribute
    {
        /// <summary>
        ///  對返回的結果進行統一的 格式
        /// </summary>
        /// <param name="context"></param>
        public override void OnResultExecuting(ResultExecutingContext context)
        {
            //根據實際需求進行具體實現
            if (context.Result is ObjectResult)
            {
                var objectResult = context.Result as ObjectResult;
                if (objectResult.Value == null)
                {
                    context.Result = new ObjectResult(new {   Success=false, code = 404, msg = "未找到資源", data ="null" }); 
                }
                else
                {
                    context.Result = new ObjectResult(new { Success = true ,code = 200, msg = "成功!", Data = objectResult.Value }); 
                }
            }
          
        }
    }
View Code

            2.3 在startup.cs 啟動容器中注冊 服務

 services.AddMvc(options =>
            {
                //方法返回結果統一化
                options.Filters.Add(typeof(WebApiResultMiddleware));
                //程序錯誤返回結果統一化
                options.Filters.Add(typeof(WebApiException));
                //身份驗證不通過是返回結果統一化
                options.Filters.Add(typeof(WebApiAuthorizationFilter));
                options.RespectBrowserAcceptHeader = true;
            });
View Code

           返回結果就不在演示了,通過這三個類 我們能做很多的事情,比如寫一個錄入日志的方法就可以解決整個框架的寫日志問題。

(4)  對外開放的接口 參數必填與非必填的聲明

 

生成的路徑樣式

對控制器的包裝  支持傳輸參數的的聲明

 

我想先把基礎的東西寫下來 為以后做准備。

比如,路由的配置、DI、管道、中間件等,我也是在學習中希望和大家一起相互印證。

 

 

            


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM