2012-04-27 12 views
7

Jestem świadomy istnieje wiele pytań w SO obsługi w ASP.NET MVC o błąd.Zalety [HandleError] nad Application_Error

widzę, przeważnie ludzie starają się osiągnąć rzeczy na trzy sposoby:

  1. Tworzenie BaseController i zastąpić metodę

  2. Korzystanie [HandleError] lub niestandardowe wyjątków filtry OnException.

  3. Application_Error wydarzenie w Global.asax.cs

Pierwsze dwa sposoby, nie może obsługiwać wszystkie wyjątki i robią tylko, które są podnoszone przez metod działania/filtrów, więc oczywiście trzeci jest będzie najlepszym podejściem do globalnej obsługi wyjątków.

Moje pytanie brzmi: dlaczego powinienem wybrać podejście [HandleError]? Jakie korzyści daje to, że nie mogę przejść przez Application_Error?

Wreszcie, czy chcę, aby sekcja customErrors była poważna w ogóle w aplikacji MVC?

Uwaga: Moje wymagania są typowe. Gdy wystąpi wyjątek, zaloguj się i zwróć niestandardową stronę błędu. Strona błędu niestandardowego może się zmieniać w zależności od kodu statusu.

Odpowiedz

8

Najbardziej oczywiste jest to, że [HandleError] umożliwia obsługę błędów w różny sposób w różnych kontrolerach i działaniach. Jest znacznie bardziej elegancki niż jakaś instrukcja zmiany w twoim handler'u Application_Error.

Kolejną korzyścią jest to, że nadal ma dostęp do kontrolera i wszystkich dobrodziejstw MVC, które mu towarzyszą, więc nadal możesz zwrócić View lub zadzwonić do innej akcji. Po tym, jak wpadniesz na numer Application_Error, straciłeś ControllerContext i naprawdę nie masz do wyboru innych opcji oprócz przekierowania.

+1

Nie widzę powodu, dla którego ktoś chciałby inaczej obsługiwać błędy w różnych kontrolerach i działaniach. Ok, jeśli zrobię tę logikę w [HandleError], to znowu chcę to zrobić w Global.asax, prawda? – VJAI

+1

Strona różnych błędów dla urządzeń mobilnych? Spersonalizowana strona błędów dla użytkowników? Fragment HTML dla żądań ajaxowych? Niestandardowy obraz błędu dla linków z uszkodzonymi obrazami? Dostęp do zabronionych stron błędów dla niektórych kontrolerów? Nietrudno wymyślić powody, by inaczej obsługiwać błędy. – bhamlin

Powiązane problemy