Jak przejść do [HandleError]
filtru w asp.net MVC Preview 5?
Ustawiłem customErrors w moim pliku Web.config
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
i umieść [HandleError] nad moją klasą kontrolera w ten sposób:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Następnie pozwoliłem moim kontrolerom dziedziczyć z tej klasy i wywołać na nich CrashTest (). Visual studio zatrzymuje się po wystąpieniu błędu i po naciśnięciu klawisza F5, aby kontynuować, następuje przekierowanie do Error.aspx? Aspxerrorpath = / sxi.mvc / CrashTest (gdzie sxi to nazwa używanego kontrolera. Oczywiście nie można znaleźć ścieżki i otrzymuję „Błąd serwera w aplikacji„ / ”.” 404.
Ta witryna została przeniesiona z wersji zapoznawczej 3 do 5. Wszystko działa (nie było dużo pracy do przeniesienia) z wyjątkiem obsługi błędów. Kiedy tworzę całkowicie nowy projekt, obsługa błędów wydaje się działać.
Pomysły?
--Uwaga -
Ponieważ to pytanie ma teraz ponad 3K wyświetleń, pomyślałem, że warto byłoby umieścić to, czego obecnie używam (ASP.NET MVC 1.0). W projekcie mvc contrib jest genialny atrybut o nazwie "RescueAttribute". Prawdopodobnie też powinieneś to sprawdzić;)
źródło
RescueAttribute
źródła: mvccontrib.codeplex.com/SourceControl/changeset/view/…Odpowiedzi:
Jeśli podasz tylko atrybut HandleError do swojej klasy (lub do metody akcji w tym przypadku), wtedy gdy wystąpi nieobsługiwany wyjątek, MVC będzie szukał odpowiedniego widoku o nazwie „Błąd” najpierw w folderze widoku kontrolera. Jeśli nie może go tam znaleźć, przejdzie do folderu widoku współdzielonego (który domyślnie powinien zawierać plik Error.aspx)
Możesz także zestawiać dodatkowe atrybuty z określonymi informacjami o typie wyjątku, którego szukasz. W tym momencie możesz skierować błąd do określonego widoku innego niż domyślny widok „Błąd”.
Aby uzyskać więcej informacji, zapoznaj się z wpisem na blogu Scotta Guthrie na ten temat.
źródło
global.asax
jak to pokazać wiadomość do użytkowników?Należy również zauważyć, że błędy, które nie ustawiają kodu błędu http na 500
(np. UnauthorizedAccessException)
nie będzie obsługiwana przez filtr HandleError.
źródło
Rozwiązanie dla kodu błędu http do 500 jest to atrybut o nazwie [ERROR], który należy umieścić na akcji
//PRZYKŁAD:
źródło
Atrybuty w MVC są bardzo przydatne w obsłudze błędów w metodzie get i post , śledzą również wywołania ajax .
Utwórz kontroler podstawowy w swojej aplikacji i odziedzicz go w kontrolerze głównym (EmployeeController).
public class EmployeeController: BaseController
Dodaj poniższy kod w kontrolerze podstawowym.
================================================
Znajduje katalog: Root / App_Start / FilterConfig.cs
Dodaj poniższy kod:
Śledź błąd AJAX:
Wywołaj funkcję CheckAJAXError podczas ładowania strony układu.
źródło
OnException
aby obsłużyć wyjątki” , ale pokazujesz dość złą implementację.Brakuje Error.aspx :) W wersji zapoznawczej 5 znajduje się on w Twoim folderze Widoki / Udostępniony. Po prostu skopiuj go z nowego projektu Preview 5.
źródło
}
źródło