當(dāng)用戶調(diào)用我們接口發(fā)生異常時(shí)太闺,默認(rèn)情況下會返回一堆錯(cuò)誤信息嘁圈,這樣既不友好最住,同時(shí)也會暴露服務(wù)器相關(guān)的一些敏感信息。有人可能會說轧粟,我可以在每段程序添加try catch 語句,這樣就不會返回錯(cuò)誤信息了,那萬一哪一天你忘記寫了兰吟,或者你同事也沒有寫通惫,不還是解決不了這個(gè)問題嗎?今天我們就來給之前寫的webapi增加個(gè)異常處理混蔼。
增加異常處理類
在XXX.api項(xiàng)目下新增一個(gè)類履腋,起名MyExceptionFilter.cs(這個(gè)名字是自己起的,可以隨意拄丰,但是推薦最后要以ExceptionFilter結(jié)尾)然后繼承IExceptionFilter府树。當(dāng)接口出現(xiàn)異常時(shí)我們統(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ā)送異常時(shí)執(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ā)送異常時(shí)執(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());
});
測試
寫完代碼測試载矿,是一個(gè)程序員分內(nèi)之事垄潮。
為了觸發(fā)異常,我們修改下數(shù)據(jù)庫連接字符串闷盔,把數(shù)據(jù)庫名稱改成其它名字弯洗,這樣在查數(shù)據(jù)庫的時(shí)候就會出現(xiàn)異常了。
我們使用postman或者Swagger接口文檔來測試逢勾,結(jié)果如下:
接口拋出了異常牡整,將一段自定義的代碼返回給了客戶。
完
今天的教程就到這里了溺拱,項(xiàng)目已經(jīng)上傳github逃贝,地址如下:https://github.com/xiaxiaoqian/NetCore3.0-WebApi
求贊
寫作不易,如果這篇文章對你有用請給作者一個(gè)贊吧迫摔!