ASP.NET Web de Base de l'API de gestion des exceptions

J'ai commencé à utiliser ASP.NET de Base pour ma nouvelle API REST projet, après l'utilisation régulière ASP.NET l'API Web pour de nombreuses années. Je ne vois pas une bonne façon de gérer les exceptions dans ASP.NET de Base de l'API Web. J'ai essayé de mettre en œuvre la gestion des exceptions filtre/attribut:

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
        };
    }
}

Et voici mon Démarrage d'enregistrement de filtre:

services.AddMvc(options =>
{
    options.Filters.Add(new AuthorizationFilter());
    options.Filters.Add(new ErrorHandlingFilter());
});

Le problème j'ai eu, c'est que lorsque exception occurres dans mon AuthorizationFilter c'est pas manipulé par ErrorHandlingFilter. Je m'attendais à être pris comme il a travaillé avec de vieux ASP.NET l'API Web.

Alors, comment puis-je attraper toutes les exceptions de l'application ainsi que toutes les exceptions de l'Action des Filtres?

  • Avez-vous essayé UseExceptionHandler middleware?
  • J'ai un exemple ici sur la façon d'utiliser UseExceptionHandler middleware
InformationsquelleAutor Andrei | 2016-07-28