Ho provato molti elmà nugets ma non hanno funzionato con l'API Web ASP.NET. Qualcuno sa perché? C'è qualche soluzione per questo?Come configurare Elmah con l'API Web ASP.NET
risposta
Un'opzione sarebbe quella di impostare un ExceptionFilterAttribute personalizzato, sovrascrivere il metodo OnException e segnalare Elmah da lì. Vedere il link riportato di seguito
per ASP.NET Web API utilizzare il pacchetto NuGet Elmah.MVC, i cui dettagli sono riportati di seguito
Tratto da: HOW TO SETUP ELMAH.MVC WITH ASP.NET MVC 4 ?
Qual è Elmah ?
ELMAH è un progetto open source il cui scopo è registrare e segnalare eccezioni non gestite nelle applicazioni Web ASP.NET.
Perché utilizzare Elmah?
ELMAH funge da intercettore non invadente di eccezioni ASP.NET non gestite, che di solito si manifestano con ASP.NET yellow screen of death.
Così ora sappiamo cosa e perché utilizzare Elmah, consente di iniziare rapidamente a utilizzare Elmah con il progetto ASP.NET MVC.
Fase 1: Fare clic destro sulla soluzione e selezionare l'opzione "Gestione pacchetti Nuget"
Fase 2: Nella ricerca responsabile Nuget Pacchetto per "Elmah" e installare l'estensione NuGet Elmah.MVC. Il gestore pacchetti Nuget scaricherà e aggiungerà le dll richieste e modificherà il file web.config <appSetting>
per Elmah wo rk.
Passaggio 3: Questo è tutto !! La tua Elmah è ora pronta per testare. Ho generato un 404 per verificare se la mia Elmah funziona, ELMAH è accessibile da questo URL: http://yourapp.com/elmah.
Spero che questo aiuti :)
Letture consigliate:
E stai generando quel 404 da un 'ApiController'? In caso contrario, ed è un controller MVC standard, hai perso completamente il punto della domanda. –
Hanno generato 404 da un normale controller, questo è solo un esempio, lo stesso sarebbe stato se avessi usato il controller webapi e avessi causato un 404. – Yasser
Lo hai provato? Perché sono abbastanza sicuro che non sia così. La gestione delle eccezioni funziona in modo diverso nell'API Web. –
Controllare l'URL di sotto di essa descrive in dettaglio come utilizzare ELMAH con API Web:
È inoltre possibile utilizzare il pacchetto NuGet di seguito:
Install-Package Elmah.Contrib.WebApi
Usage:
Basta registrarlo durante l'avvio dell'applicazione o su una base controller-by-controller.
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
ci sono due opzioni utilizzando ELMAH per catturare le eccezioni in WEB API.
Se si desidera acquisire gli errori che si verificano in Azioni e controllori, vale a dire nella logica aziendale è possibile creare un ActionFilterAttribute e registrare tali eccezioni in ELMAH.
esempio:
public class UnhandledExceptionFilter : ExceptionFilterAttribute {
public override void OnException(HttpActionExecutedContext context) {
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
}
}
Poi wireup aggiungendo tale filtro.
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());
}
}
Con l'approccio di cui sopra dopo gli errori non saranno trattati:
- eccezioni generate da costruttori di controller.
- Eccezioni generate dai gestori di messaggi.
- Eccezioni generate durante il routing.
- eccezioni generate durante il contenuto della risposta serializzazione
Riferimento: 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
Affinché ELMAH effettuare il login errori WEB API a livello globale in modo tale che tutti i 500 errori del server vengono catturati poi fare questo :
Installare NuGet: https://www.nuget.org/packages/Elmah.Contrib.WebApi/
Aggiungere il seguente per WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
...
}
}
E se si desidera visualizzare i messaggi di errore personalizzato per gli errori 500 del server è possibile implementare la nuova ExceptionHandler in Api Web (Si noti che ExceptionLogger e ExceptionHandler sono diverse.)
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);
}
}
}
Riferimento: http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
grazie amico, questo è stato utile. Mi stavo ancora grattando la testa per un po 'fino a quando ho capito come farlo funzionare nella mia situazione (dove il WebApi è anche in esecuzione nel contesto di un sito MVC); la risposta era semplicemente installare anche il pacchetto Elmah.MVC. Espandilo leggermente sul mio post di blog qui: http://dbarrowstechblog.blogspot.co.uk/2015/03/elmah-aspnet-webapi-tip.html –
La prima (semplice) soluzione che chiama direttamente 'Elmah.ErrorLog .GetDefault (HttpContext.Current) .Log' funziona bene, ma non invia una e-mail (se è così che ha impostato Elmah) - registra solo. Se vuoi che la tua eccezione venga gestita da Elmah nel modo che hai specificato in web.config, allora suggerirei di sostituire la chiamata .Log con 'Elmah.ErrorSignal.FromCurrentContext(). Raise (context.Exception); innescare la normale gestione di Elmah. – Greg
- 1. Come configurare ELMAH con SignalR
- 2. Protezione di Elmah nel sito Web ASP.NET
- 3. E 'possibile configurare ELMAH interamente nel codice?
- 4. Aiuto con configurazione Elmah in ASP.NET
- 5. Come configurare ELMAH a livello di programmazione?
- 6. come configurare asp.net con .net 4.5
- 7. Protezione dei feed RSS Elmah nel sito Web ASP.NET
- 8. Come configurare ELMAH per funzionare con Windows Azure? Ottengo un 404 su Elmah.axd
- 9. Impossibile configurare la posta per Elmah
- 10. Come configurare ASP.NET Identity ApplicationUserManager con StructureMap
- 11. Come configurare ASP.NET MVC 2 con MySQL?
- 12. Come proteggere la console Web ELMAH in Umbraco?
- 13. Come proteggere Elmah su ASP.Net MVC 4 con Sicurezza integrata di Windows: Elmah ignora le mie impostazioni
- 14. Come integrare axd (Elmah) come componente nel sito ASP.NET MVC
- 15. ELMAH per ASP.NET MVC 4 con SQL SERVER 2008 R2
- 16. Sezione di progetto di distribuzione Web VS2008 Sostituzione con Elmah
- 17. È possibile configurare Autofac per lavorare con ASP.NET MVC e ASP.NET Web Api
- 18. Configurare il server git con l'interfaccia web?
- 19. Come si usa Elmah in ASP.NET 5/vNext/Core?
- 20. Come configurare/configurare Log4Net con ASP.NET (incluso MVC) C# in Visual Studio 2012 ~
- 21. Impossibile accedere/elmah sul server di produzione con Elmah MVC?
- 22. dati personalizzati Elmah YSOD
- 23. Come registrare le informazioni con Elmah
- 24. API Web ASP.NET con DotNetOpenAuth
- 25. Transazioni con API WEB ASP.net
- 26. ELMAH - Filtro 404 Errori
- 27. Autenticazione con ASP.NET Web API
- 28. Registrazione errori client con Elmah
- 29. Serilog, Elmah o entrambi per un progetto ASP.NET MVC?
- 30. Come configurare un build TeamCity per un progetto ASP.NET 5
la cosa ho lottato con (e ancora non ho trovato il tempo per rispondere) sta avendo l'autenticazione di form sul mio accesso ELMAH mescolato con autenticazione di base sul mio api –
@AntonyScott hai guardato [MADAM ] (Http://www.raboof.com/projects/madam/)? –