2013-09-26 19 views
10

Mam pytanie dotyczące najlepszego sposobu używania HandleErrorAttribute w mojej aplikacji MVC 5. Jak wiemy, możemy dodać ten atrybut do filtrów globalnych tak:Korzystanie z HandleErrorAttribute w aplikacji ASP.NET MVC

filters.Add(new HandleErrorAttribute{View = "Error"}); 

to obejmować aplikację aby pokazać „błąd” zobaczyć za każdym razem, gdy nieobsługiwany wyjątek rzucony na każdym poziomie aplikacji. Ale jeśli mam jakąś logikę w innym globalnym autoryzowanym lub działającym filtrze, które dają pewien wyjątek, niż kiedy pierwszy raz wyjdzie z pliku, to aplikacja spróbuje przekierować do widoku błędu, ponownie zacznie wykonywać inny filtr i ponownie wygeneruje ten sam wyjątek, więc asp.net, aby uniknąć tej pętli zakończyć aplikację. Jaki jest najlepszy sposób użycia tego HandleErrorAttribute, aby uniknąć takiego zachowania? Dzięki!

Edit: Po niektóre debugowanie i stwierdził, że nie jest to zwykłe zachowanie HandleErrorAttribute, więc to dla mnie pętli dzieje tylko podczas korzystania z niestandardowych Trasy F. E.

{key}/{controller}/{action} 

i gdy wystąpi jakiś błąd w logice filtra, a następnie aplikacja próbować przekierować do błędu widok, ale znowu inna logika filtr zaczyna exectue a ja nawet zobaczyć „error” wartość {klucz} parametru trasy, tak to jest niepożądane zachowanie. Kiedy używam domyślnej trasy {controller}/{action} , tak się nie dzieje i dostaję się dokładnie do widoku błędów bez wykonywania żadnej globalnej logiki filtra po raz drugi.

Odpowiedz

9

Należy owinąć logikę działania filtra wewnątrz trycatch, następnie wewnątrz bloku catch, przekierowanie do widoku Error i przekazać Exception.

Twoją jedyną alternatywą jest całkowite zlikwidowanie HandleError i użycie zdarzenia Application_Error wewnątrz Global.asax do zarządzania obsługą błędów. W ten sposób możesz przekierować do swojej akcji Error, niezależnie od tego, gdzie wystąpił błąd.

+0

Dzięki! To miłe podejście. – igorGIS

+0

co z używaniem ELMAH? –

+1

@Murali Nie jestem fanem ELMAH, szczerze mówiąc – mattytommo

Powiązane problemy