.net core自带的异常处理已经非常完善,但是我们有时需要使用自己的异常处理规则。
今天我们就来手动创建一个自己的全局异常中间件,分别处理Ajax请求。
1、首先创建我们的全局异常中间件:
using Microsoft.AspNetCore.Http;
using System;
using System.Threading.Tasks;
public class GlobalExceptionMiddleware
{
private readonly RequestDelegate _next;
public GlobalExceptionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
// 判断请求类型
bool isAjaxRequest = context.Request.Headers["Content-Type"] == "application/json";
if (isAjaxRequest)
{
// 如果是ajax请求则交给Handle处理
await HandleAjaxExceptionAsync(context, ex);
//表示异常已经处理,如果后面还有中间件则不做处理
context.Items["ExceptionHandled"] = true;
}
else
{
//如果是其他类型的请求,可自行处理,这里我们直接抛出不做处理
throw;
}
}
}
private Task HandleAjaxExceptionAsync(HttpContext context, Exception exception)
{
var response = JsonConvert.SerializeObject(new ResponseDto()
{
Code = 400,
Message = exception.Message
});
context.Response.ContentType = "application/json";
return context.Response.WriteAsync(response);
}
}
2、在.net管道配置中启用全局异常中间件
当然是在Startup文件,管道处理中启用
app.UseMiddleware<GlobalExceptionMiddleware>();