在上一章博客中,已经说了过滤器怎么使用
上代码
namespace TestApi;
public class BusinessException : Exception
{
private readonly string _message;
public BusinessException(string message) : base()
{
_message = message;
}
public string GetMessage()
{
return _message;
}
}
using System.Net;
using System.Text.Json;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace TestApi;
public class ExceptionFilter : IAsyncExceptionFilter
{
public Task OnExceptionAsync(ExceptionContext context)
{
ApiResult a = new ApiResult()
{
Code = (int)HttpStatusCode.InternalServerError,
Data = null,
Success = false
};
int code = (int)HttpStatusCode.InternalServerError;
if (context.Exception is BusinessException e)
{
a.Message = e.GetMessage();
a.Success = true;
a.Code = 322;// 设置状态码322代表业务异常
code = (int)HttpStatusCode.OK;
}
else
{
a.Message = context.Exception.Message;
}
context.Result = new ContentResult()
{
StatusCode = code,
ContentType = "application/json;charset=utf-8",
Content = JsonSerializer.Serialize(a)
};
return Task.CompletedTask;
}
}
builder.Services.AddControllers(r =>
{
r.Filters.Add<ExceptionFilter>();
r.Filters.Add<ResultFilter>();
});