ASP.NET Core Web API异常处理

在使用常规ASP.NET Web API多年后,我开始使用ASP.NET Core作为我的新REST API项目。我没有看到在ASP.NET Core Web API中处理异常的好方法。我试图实现异常处理过滤器/属性:


public class ErrorHandlingFilter : ExceptionFilterAttribute

{

    public override void OnException(ExceptionContext context)

    {

        HandleExceptionAsync(context);

        context.ExceptionHandled = true;

    }


    private static void HandleExceptionAsync(ExceptionContext context)

    {

        var exception = context.Exception;


        if (exception is MyNotFoundException)

            SetExceptionResult(context, exception, HttpStatusCode.NotFound);

        else if (exception is MyUnauthorizedException)

            SetExceptionResult(context, exception, HttpStatusCode.Unauthorized);

        else if (exception is MyException)

            SetExceptionResult(context, exception, HttpStatusCode.BadRequest);

        else

            SetExceptionResult(context, exception, HttpStatusCode.InternalServerError);

    }


    private static void SetExceptionResult(

        ExceptionContext context, 

        Exception exception, 

        HttpStatusCode code)

    {

        context.Result = new JsonResult(new ApiResponse(exception))

        {

            StatusCode = (int)code

        };

    }

}

这是我的启动过滤器注册:


services.AddMvc(options =>

{

    options.Filters.Add(new AuthorizationFilter());

    options.Filters.Add(new ErrorHandlingFilter());

});

我遇到的问题是,当我AuthorizationFilter的异常发生时,它没有被处理ErrorHandlingFilter。我希望它能够像旧的ASP.NET Web API一样被捕获。


那么如何捕获所有应用程序异常以及Action Filters的任何异常?


MMMHUHU
浏览 1292回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP