Besoin d'un exemple complet pour gérer les exceptions non gérées à l'aide de “ExceptionHandler” dans ASP.NET l'Api Web?
J'avais vérifié ce lien
http://www.asp.net/web-api/overview/web-api-routing-and-actions/web-api-global-error-handling.
Dans ce lien, ils ont mentionné comme ce
class OopsExceptionHandler : ExceptionHandler
{
public override void HandleCore(ExceptionHandlerContext context)
{
context.Result = new TextPlainErrorResult
{
Request = context.ExceptionContext.Request,
Content = "Oops! Sorry! Something went wrong." +
"Please contact [email protected] so we can try to fix it."
};
}
private class TextPlainErrorResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string Content { get; set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response =
new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent(Content);
response.RequestMessage = Request;
return Task.FromResult(response);
}
}
}
Je ne sais pas comment appeler cette classe dans mon Web API actions. Donc, quelqu'un peut-il me donner l'exemple complet d'utilisation de ce ExceptionHandler
.
- Bonne question! On pourrait s'attendre à ce que les informations qui OP est à la recherche fera partie de l'article MSDN - il n'est mentionné que vaguement:
We provide two new user-replaceable services, IExceptionLogger and IExceptionHandler
Vous devez vous connecter pour publier un commentaire.
Dans votre WebApi vos config faut ajouter la ligne:
Assurez-vous également que vous avez créé la base de ExceptionHandler classe qui implémente IExceptionHandler:
Noter que cela ne fera que gérer les exceptions qui ne sont pas traitées ailleurs (p. ex. par des filtres d'Exception).
Vous n'avez pas besoin de mettre en œuvre IExceptionHandler faible niveau de mécanisme de vous-même.
Au lieu de cela, vous pouvez simplement hériter de ExceptionHandler et remplacer le Poignée méthode.
ExceptionHandler implémente IExceptionHandler et gérer la base de mécanismes de base (comme async et que l'exception doit être manipulé ou pas).
Utiliser votre gestionnaire d'exception comme ça:
Source
Cette page explique comment implémente IExceptionHandler, mais il y a quelques fautes de frappe et le code ne reflètent pas la dernière version de WebApi.
Il n'y a pas de documentation sur le
System.Web.Http.ExceptionHandling
espace de noms (un peu sur NuDoq).Donc..
à l'aide d'un .NET de l'assemblée decompileravoir un coup d'oeil à le code source sur GitHub, j'ai vu leExceptionHandler
classe qui implémenteIExceptionHandler
et certains ont des méthodes virtuelles.ExceptionHandler ressemble à ça:
Vous pouvez clairement voir que
ShouldHandle
est mis en œuvre à l'aide deExceptionContextCatchBlock.IsTopLevel
et queHandleAsync
appelsHandle
🙂J'espère que ce sera aide jusqu'à ce que la documentation complète se montre.
Comme par Jon Susiak la réponse dont vous avez besoin pour utiliser:
Note le
Replace
appel, pas unAdd
.La raison pour cela est que par l'article sur ce lien:
Mondial de la gestion d'Erreurs ASP.NET Web API 2
Et depuis il y a déjà un gestionnaire d'inscrits par défaut vous ne pouvez pas en ajouter un autre.
Vous pouvez prendre un coup d'oeil à l'échantillon suivant à partir de l'API Web de l'équipe:
http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/Elmah/ReadMe.txt