Gestion des exceptions globales WebAPI
J'ai un ASP WebAPI projet. Je suis en train de configurer un gestionnaire global d'exception sur mon basecontroller. J'ai donc créé un ExceptionFilterAttribute
comme si.
using System.Web.Http.Filters;
public class MyExceptionFilterAttribute : ExceptionFilterAttribute
{
protected static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
var exception = actionExecutedContext.Exception;
log.Fatal(exception);
base.OnException(actionExecutedContext);
}
}
Puis j'ai aussi enregistré dans /App_Start/WebApiConfig.cs
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//...
//Setup Filters
config.Filters.Add(new MyExceptionFilterAttribute());
}
}
Quand j'ajoute les attributs de mon contrôleur (ou de base-contrôleur), rien n'est connecté. Ce que je fais mal?
Edit: Mon contrôleur de jeter l'exception:
[HttpGet]
public string Hello(string name)
{
if (name.Equals("error", StringComparison.OrdinalIgnoreCase))
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
else
{
return name;
}
}
source d'informationauteur Thijs
Vous devez vous connecter pour publier un commentaire.
Comme @ShekharPankaj l'a souligné, pas toutes les exceptions sont gérées par l'attribut ou de l'approche @Matías fourni). Mon code était bon. J'simple changé l'exception d'un
ArgumentException
et elle est prise en charge.Voir aussi ce fil: attraper toutes les exceptions non gérées dans ASP.NET Web Api
En fait, quand vous ajoutez que le filtre de votre
HttpConfiguration
cela signifie qu'il va être exécuté pour toute action. C'est, vous n'avez pas besoin d'ajouter que tout attribut à votre contrôleurs d'API.Ce qui peut être sauter votre filtre? Autre filtre. Le premier filtre pour définir la réponse qui l'emporte et il peut arriver que l'action elle-même est jamais exécuté.
De toute façon, peut-être vous avez besoin pour passer à mettre en œuvre un
IExceptionHandler
et configurer comme suit:Cette approche est mieux parce que c'est un vrai, dernière chance gestionnaire d'exception et il sera toujours appelé indépendamment du comportement des filtres.