Asp.netCore3.0 WebApi從0到1手摸手教你寫【6】增加接口異常處理

當(dāng)用戶調(diào)用我們接口發(fā)生異常時,默認(rèn)情況下會返回一堆錯誤信息,這樣既不友好,同時也會暴露服務(wù)器相關(guān)的一些敏感信息。有人可能會說,我可以在每段程序添加try catch 語句,這樣就不會返回錯誤信息了,那萬一哪一天你忘記寫了,或者你同事也沒有寫,不還是解決不了這個問題嗎?今天我們就來給之前寫的webapi增加個異常處理。

增加異常處理類

在XXX.api項目下新增一個類,起名MyExceptionFilter.cs(這個名字是自己起的,可以隨意,但是推薦最后要以ExceptionFilter結(jié)尾)然后繼承IExceptionFilter。當(dāng)接口出現(xiàn)異常時我們統(tǒng)一返回一段json字符串{ "code": 0, "message": "接口開小差了" },剩下的代碼如下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

namespace XXX.api
{
    /// <summary>
    /// 自定義webapi異常處理
    /// </summary>
    public class MyExceptionFilter : IExceptionFilter
    {
        /// <summary>
        /// 發(fā)送異常時執(zhí)行的代碼
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            Models.RetModel ret = new Models.RetModel();
            ret.code = 0;
            ret.message = "接口開小差了";
            string errRet= Newtonsoft.Json.JsonConvert.SerializeObject(ret);
            if (context.ExceptionHandled==false)
            {
                context.Result = new ContentResult
                {
                    Content = errRet,
                    StatusCode = StatusCodes.Status200OK,
                    ContentType="application/json"
                };
            }
            context.ExceptionHandled = true;
        }
        /// <summary>
        /// 異步發(fā)送異常時執(zhí)行的代碼
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task OnExceptionAsync(ExceptionContext context)
        {
            OnException(context);
            return Task.CompletedTask;
        }
    }
}

配置Startup.cs

在ConfigureServices中添加過濾器,MyExceptionFilter就是上面我們自定義的異常過濾器

 services.AddControllers(option=> {
                option.Filters.Add(new MyExceptionFilter());
            });

測試

寫完代碼測試,是一個程序員分內(nèi)之事。
為了觸發(fā)異常,我們修改下數(shù)據(jù)庫連接字符串,把數(shù)據(jù)庫名稱改成其它名字,這樣在查數(shù)據(jù)庫的時候就會出現(xiàn)異常了。
我們使用postman或者Swagger接口文檔來測試,結(jié)果如下:


測試結(jié)果

接口拋出了異常,將一段自定義的代碼返回給了客戶。

今天的教程就到這里了,項目已經(jīng)上傳github,地址如下:https://github.com/xiaxiaoqian/NetCore3.0-WebApi

求贊

寫作不易,如果這篇文章對你有用請給作者一個贊吧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容