Próbowałem już wielu nusa z elmah, ale nie działały one z interfejsem ASP.NET Web API. Czy ktoś wie dlaczego? Czy jest w tym jakaś praca?Jak skonfigurować Elmah za pomocą interfejsu ASP.NET Web API
Odpowiedz
Jedną opcją byłoby ustawienie niestandardowego ExceptionFilterAttribute, zastąpienie metody OnException i wysłanie stamtąd Elmah. Zobacz przykładowy link poniżej
dla ASP.NET Web API użyć pakietu Elmah.MVC Nuget, których szczegóły podano poniżej
albumu: HOW TO SETUP ELMAH.MVC WITH ASP.NET MVC 4 ?
Co jest ELMAH ?
ELMAH to projekt typu open source, którego celem jest rejestrowanie i zgłaszanie nieobsługiwanych wyjątków w aplikacjach internetowych ASP.NET.
Dlaczego warto korzystać z Elmah?
ELMAH służy jako dyskretny kolektora nieobsłużonych wyjątków ASP.NET, te zwykle manifestującej z ASP.NET yellow screen of death.
Teraz wiemy już, co i dlaczego warto używać Elmah, Zacznijmy od szybkiego korzystania z Elmah w projekcie ASP.NET MVC.
Krok 1: prawym przyciskiem myszy na rozwiązania i wybrać opcję
Step 2 "Zarządzanie Nuget pakiety": W poszukiwaniu menedżera Nuget Pakiet dla "ELMAH" i zainstalować Nuget rozszerzenie Elmah.MVC. Menedżer pakietów Nuget pobierze i doda wymagane biblioteki DLL i zmodyfikuje plik web.config: <appSetting>
dla Elmah na wo rk.
Krok 3: To wszystko !! Twoja Elmah jest teraz gotowa do sprawdzenia. Wygenerowałem 404 do sprawdzenia, czy moja Elmah działa, dostęp do ELMAH można uzyskać pod tym adresem: http://yourapp.com/elmah.
Nadzieja to pomaga :)
Dalsze informacje:
Czy generujesz 404 z "ApiController"? Jeśli nie, a jest to standardowy kontroler MVC, całkowicie pomijałeś punkt pytania. –
Wygenerowałem 404 ze zwykłego kontrolera, to tylko przykład, to samo by miało miejsce, gdybym użył kontrolera webapi i spowodował 404. – Yasser
Czy próbowałeś tego? Ponieważ jestem prawie pewien, że tak nie jest. Obsługa wyjątków działa inaczej w Web API. –
Sprawdź poniższy adres URL to opisać w szczegółach jak używać ELMAH z Web API:
Można również skorzystać z poniższego pakietu Nuget:
Install-Package Elmah.Contrib.WebApi
Zastosowanie:
Po prostu zarejestruj się podczas uruchamiania aplikacji lub na zasadzie kontrolera.
protected void Application_Start() { GlobalConfiguration.Configuration.Filters.Add(new ElmahHandleErrorApiAttribute()); ... }
Istnieją dwie opcje przy użyciu ELMAH do przechwytywania wyjątków w Web API.
Jeśli chcesz przechwycić błędy , które występują w Actions i Controllers, tzn. W logice biznesowej możesz utworzyć ActionFilterAttribute i zarejestrować te wyjątki w ELMAH.
przykład:
public class UnhandledExceptionFilter : ExceptionFilterAttribute {
public override void OnException(HttpActionExecutedContext context) {
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception));
}
}
Następnie wireup dodając ten filtr.
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());
}
}
Z powyższego podejścia następujące błędy nie będą obsługiwane:
- wyjątki generowane z konstruktorów kontrolera.
- Wyjątki generowane przez komunikatory.
- Wyjątki zgłaszane podczas routingu.
- wyjątki rzucane podczas zawartości odpowiedź serializacji
referencyjny: 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
Aby ELMAH do zalogowania błędy Web API na poziomie globalnym tak, że wszystkie 500 błędy serwera zostały złowione następnie to zrobić :
Install Nuget: https://www.nuget.org/packages/Elmah.Contrib.WebApi/
Dodaj poniżej, aby WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
...
config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger());
...
}
}
A jeśli chcesz pokazać niestandardowych komunikatów o błędach dla błędów 500 Server można wdrożyć nową ExceptionHandler w Web API (Zauważ, że ExceptionLogger i ExceptionHandler są różne.)
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);
}
}
}
referencyjny: http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling
dzięki mate, to było pomocne. Nadal drapałem sobie głowę przez chwilę, dopóki nie zorientowałem się, jak to zrobić w mojej sytuacji (gdzie WebApi działa również w kontekście strony MVC); odpowiedzią było po prostu zainstalowanie pakietu Elmah.MVC. Rozwijam się nieco na moim blogu tutaj: http://dbarrowstechblog.blogspot.co.uk/2015/03/elmah-aspnet-webapi-tip.html –
Pierwsze (proste) rozwiązanie, które bezpośrednio wywołuje 'Elmah.ErrorLog .GetDefault (HttpContext.Current) .Log' działa dobrze, ale nie wysyła wiadomości e-mail (jeśli masz skonfigurowaną Elmah) - to się po prostu loguje. Jeśli chcesz, aby Twój wyjątek był obsługiwany przez Elmah w sposób określony w web.config, to sugerowałbym zastąpienie wywołania .Log za pomocą 'Elmah.ErrorSignal.FromCurrentContext(). Raise (context.Exception);' który będzie wywołać normalną obsługę Elmah. – Greg
- 1. Umieszczanie tablicy obiektów za pomocą interfejsu API MVC Web API
- 2. Wyjątek Obsługa interfejsu ASP.NET MVC Web API
- 3. Włączanie interfejsu Cross Domain ASP.net Web API
- 4. Uwierzytelnianie ASP.NET Web API
- 5. Wzmocnienie dźwięku za pomocą interfejsu Web Audio API
- 6. OGŁASZANIE JsonObject Za pomocą HttpClient z interfejsu Web API
- 7. Jak pobrać plik binarny za pomocą interfejsu ASP.net Web API i JavaScript?
- 8. Powracanie anonimowych typów za pomocą interfejsu Web API
- 9. ASP.NET Web API CacheControl
- 10. oauth2orize za pomocą interfejsu API?
- 11. Jak skonfigurować ELMAH z SignalR
- 12. Równolegle uwierzytelnianie podstawowe i formularzy za pomocą interfejsu ASP.NET Web API
- 13. Czy można całkowicie skonfigurować ELMAH w kodzie?
- 14. Czas trwania działania interfejsu ASP Web API
- 15. ELMAH na ASP.NET vNext?
- 16. Najlepsza praktyka w zakresie obsługi błędów za pomocą interfejsu ASP.NET Web API
- 17. Budowanie interfejsu API C#/ASP.NET za pomocą oAuth do uwierzytelniania interfejsu API
- 18. uwierzytelniania z ASP.NET Web API
- 19. Wszystkie żądania do interfejsu ASP.NET Web API zwracają błąd 404
- 20. Dziedziczenie i formant JSON interfejsu ASP.NET Web API
- 21. ASP.NET Web API Autoryzacja żetonów upływającym wcześnie
- 22. Dodaj odwołanie do usługi Web API ASP.NET
- 23. Najlepsze sprawdzanie autentyczności interfejsu API sieci Web
- 24. Testowanie interfejsu ASP.NET Web API Multipart Form danych Przesyłanie pliku
- 25. Uwierzytelnianie za pomocą protokołu OAuth w interfejsie API sieci Web
- 26. Jak rejestrować informacje za pomocą Elmah
- 27. Nie można skonfigurować pocztę ELMAH
- 28. Czy można skonfigurować punkt końcowy bramy AWS API dla funkcji Lambda za pomocą interfejsu API AWS?
- 29. Jaki jest obecnie zalecany sposób wykonywania częściowych aktualizacji za pomocą interfejsu Web API?
- 30. Zapisywanie plików za pomocą spinacza za pomocą interfejsu API
rzecz Walczyłem z (i nadal nie znalazłem czasu, aby adres) jest posiadanie uwierzytelniania formularzy na mojej dostępu ELMAH zmieszanego z podstawowego uwierzytelniania na moim api –
@AntonyScott pan spojrzał na [MADAM ] (http://www.raboof.com/projects/madam/)? –