J'ai essayé de nombreux nugets elmah mais ils ne fonctionnaient pas avec l'API Web ASP.NET. Est-ce que quelqu'un sait pourquoi? Y a-t-il un moyen de contourner cela?
Il existe deux options en utilisant ELMAH pour capturer les exceptions dans l'API WEB.
Si vous souhaitez capturer les erreurs rencontrées dans les actions et les contrôleurs , c'est-à-dire que dans votre logique métier, vous pouvez créer un ActionFilterAttribute et consigner ces exceptions dans ELMAH.
exemple:
public class UnhandledExceptionFilter : ExceptionFilterAttribute {
public override void OnException(HttpActionExecutedContext context) {
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
}
}
Ensuite, câbler en ajoutant ce filtre.
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Filters.Add(new UnhandledExceptionFilter());
}
}
Avec l'approche ci-dessus, les erreurs suivantes ne seront pas traitées:
Référence: http://blogs.msdn.com/b/webdev/archive/2012/11/16/capturing-unhandled-exceptions-in-asp-net-web-api-s-with-elmah. aspx & http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
Pour qu'ELMAH enregistre les erreurs de l'API WEB au niveau global de sorte que les 500 erreurs de serveur soient détectées, procédez comme suit:
Installez nuget: https://www.nuget.org/packages/Elmah.Contrib.WebApi/
Ajoutez ce qui suit à WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
...
}
}
Et si vous souhaitez afficher des messages d'erreur personnalisés pour les erreurs 500 Server, vous pouvez implémenter le nouveau ExceptionHandler dans Web Api (notez que ExceptionLogger et ExceptionHandler sont différents.)
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);
}
}
}
Référence: http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
une option serait de configurer un ExceptionFilterAttribute personnalisé, de remplacer la méthode OnException et de signaler Elmah à partir de là. Voir l'exemple de lien ci-dessous
Vérifiez l'URL ci-dessous qu'elle décrit en détail comment utiliser elmah avec l'API Web:
Vous pouvez également utiliser le package NuGet ci-dessous:
Install-Package Elmah.Contrib.WebApi
Usage:
Enregistrez-le simplement lors du démarrage de votre application, ou contrôleur par contrôleur.
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
(à partir de le repo Elmah.Contrib.WebApi GitHub )
Pour l'API Web ASP.NET, utilisez le package nuget Elmah.MVC , dont les détails sont donnés ci-dessous
Tiré de: COMMENT CONFIGURER ELMAH.MVC AVEC ASP.NET MVC 4?
Qu'est-ce que Elmah?
ELMAH est un projet open source dont le but est de consigner et de signaler les exceptions non gérées dans les applications Web ASP.NET.
Pourquoi utiliser Elmah?
ELMAH sert d'intercepteur discret des exceptions ASP.NET non gérées, celles qui se manifestent généralement avec ASP.NET écran jaune de la mort .
Alors maintenant, nous savons quoi et pourquoi utiliser Elmah, permet de commencer rapidement à utiliser Elmah avec votre projet ASP.NET MVC.
Étape 1: Faites un clic droit sur votre solution et sélectionnez l'option "Gérer les packages Nuget"
Étape 2: Dans le gestionnaire de paquets Nuget, recherchez "Elmah" et installez l'extension Elmah.MVC nuget. Le gestionnaire de paquets Nuget téléchargera et ajoutera les DLL requises et modifiera le <appSetting>
Du web.config pour qu'Elmah fonctionnerk.
Étape 3: C'est tout !! Votre Elmah est maintenant prêt à être testé. J'ai généré un 404 pour tester si mon Elmah fonctionne, ELMAH est accessible par cette URL: http://yourapp.com/elmah.
J'espère que cela t'aides :)
Lectures complémentaires: