五彩盒子五彩盒子五彩盒子

使用.net core全局异常中间件处理Ajax请求的异常,其他类型不错处理

.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>();

热门推荐