ASP.NET Core 2.0使用中间件或过滤器(Filter)处理异常及示例代码

本文主要介绍在ASP.NET Core 2.0中,通使用中间件(Middleware)或过滤器(Filter),来处理网站中异常的捕获和异常日志的记录。

1、使用中间件(Middleware)进行异常处理

public class ExceptionHandler
{
    private readonly RequestDelegate _next;
    public ExceptionHandler(RequestDelegate next)
    {
        _next = next;
    }
    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next.Invoke(context);
        }
        catch (Exception ex)
        {
            await HandleExceptionAsync(context, ex);
        }
    }
    private async Task HandleExceptionAsync(HttpContext context, Exception exception)
    {
        var response = context.Response;
        response.ContentType = "application/json";
        response.StatusCode = (int)HttpStatusCode.InternalServerError;
        await response.WriteAsync(JsonConvert.SerializeObject(new
        {
            // 直接输出异常信息,如需记录日志等操作,改这就可以
            error = new
            {
                message = exception.Message,
                exception = exception.GetType().Name
            }
        }));
    }
}

在Startup.cs中Configure方法注册中间件

if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseMiddleware<ExceptionHandler>();

2、使用过滤器(Filter)处理异常

public class MyUnhandledExceptionFilter : ActionFilterAttribute, IExceptionFilter
{        
    public void OnException(ExceptionContext context)
    {    // 直接输出异常信息,如需记录日志等操作,改这就可以
        context.Result = new BadRequestObjectResult(context.Exception.Message); // 直接输出异常信息,如需记录日志等操作,改这就可以
    }
}

在Startup.cs中ConfigureServices方法注册过滤器

if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseMiddleware<ExceptionHandler>();

推荐阅读
cjavapy编程之路首页