W poprzedniej części serii zaczęliśmy poznawać kontrolery w wydaniu ASP.NET MVC. Dzisiaj poznamy kolejne możliwości przez nie oferowane. Zaczniemy od filtrów, a dokładniej rzecz ujmując od filtra odpowiedzialnego za obsługę błędów.
Jeśli mieliście styczność z Zend Frameworkiem, na pewno waszej uwadze nie umknął kontroler o nawie Error, który uruchamiany jest za każdym razem, gdy w aplikacji źle się dzieje. W przypadku ASP.NET MVC nie ma domyślnego kontrolera, który obsługuje błędy. Obsługą błędów zajmuje się klasa HandleErrorAttribute. Niestety w przypadku PHP nie ma czegoś takiego jak atrybuty, więc z początku zapis filtrów może wydawać się dziwny. Gwarantuję jednak, że dają one ogromne możliwości.
Korzystanie z obsługi błędów należy rozpocząć od wprowadzenia modyfikacji do pliku konfiguracyjnego web.config. Domyślnie wyświetlanie błędów przy pomocy plików widoku działa na zdalnych maszynach. Innymi słowy my jako programiści widzimy wszystkie robaczki, a użytkownik końcowy tylko ładną informację o problemie. Aby to zmienić w sekcji system.web pliku web.config należy umieścić następujący kod:
<customErrors mode="On"></customErrors>
Jest to najprostsza forma jaką można dodać do pliku konfiguracyjnego. W wersji bardziej rozbudowanej mamy możliwość określenia do jakiego pliku nastąpi przekierowanie w przypadku wystąpienia konkretnego statusu błędu (o pliku web.config napiszę osobny wpis)
Teraz jeśli dodamy do klasy kontrolera filtr [HandleError], nasza aplikacja będzie w stanie wykryć nieobsłużone wyjątki i wyświetlić przygotowany przez nas komunikat błędu. Przykładowy kod kontrolera:
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
Filtr [HandleError] przechwytuje wyjątki i wyświetla widok Error z bieżącego kontrolera (w tym przypadku z kontrolera Home). Jeśli widok nie zostanie odnaleziony, kolejnym przeszukiwanym folderem będzie Shared.
Domyślnym zachowaniem filtra [HandleError] jest przechwytywanie wszystkich wyjątków jakie pojawią się w aplikacji. A co jeśli chcielibyśmy wyświetlać różne komunikaty błędów w zależności od rodzaju wyjątku? Nic prostszego. Wystarczy ustawić właściwości odpowiedzialne za przechwytywanie wyjątków i zwracanie widoku.
Właściwościami tymi są:
- ExceptionType – rodzaj przechwytywanego wyjątku
- View – widok, który zostanie wyrenderowany
- Master – szablon strony wzorcowej
- Order – kolejność z jaką filtry są stosowane
Prosty przykład przechwytywania konkretnego wyjątku oraz wyświetlenie komunikatu błędu innego niż domyślny:
[HandleError(ExceptionType = typeof(IndexOutOfRangeException), View = "AnotherError")]
W przypadku przechwytywania kilku różnych wyjątków należy pamiętać, że filtry dopasowywane są od góry i w momencie napotkania filtra, który może dany wyjątek obsłużyć, dalsze sprawdzanie filtrów zostaje przerwane. Dlatego ważne jest w takich sytuacjach umieszczanie najbardziej szczegółowych filtrów jak najwyżej
Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...
Zwiń
Czytaj na blogu autora...