Filtry akcji ASP.NET MVC

Prowadząc szkolenie z ASP.NET MVC, zauważyłem, że kursanci rzadko używają filtrów akcji ASP.NET MVC (przede wszystkim tworzą własne) – dlatego chciałem poruszyć ten temat. Wielokrotnie widziałem w różnych projektach sytuacje, w których każda akcja w kontrolerze zawierała na swoim początku identyczny kod (na ogół kilka linijek, ale widziałem też kod o długości 35 linijek :D). Za każdym razem tworzenie nowej akcji sprowadzało się w pierwszym kroku do skopiowania początku z innej akcji. W niektórych sytuacjach kod właściwy akcji był dużo krótszy niż ten wspólny kod.

W takich sytuacjach idealnie sprawdzają się filtry akcji. W kolejnych wpisach pokażę przykładowe własne filtry akcji. 🙂

Czym są filtry akcji?

Microsoft w ASP.NET MVC udostępnił mechanizm, który umożliwia wykonanie kawałka kodu w trakcie obsługi żądania (wykonania akcji w kontrolerze). Co fajne, mechanizm ten działa w sposób deklaratywny i możemy, na przykład, powiedzieć, że ta sama logika ma zostać wykonana dla każdej akcji czy wszystkich kontrolerów w aplikacji (to wszystko za pomocą jednej linijki kodu).

Darmowy kurs Visual Studio

Pracując z setkami programistów, zauważyłem, że większość osób nie pracuje efektywnie w Visual Studio. W skrajnych przypadkach korzystali z kopiowania z wykorzystaniem menu Edit. Wiem, że to dziwne, ale naprawdę niektórzy tak pracują. Dlatego postanowiłem stworzyć kurs Visual Studio – aby pomóc koleżankom i kolegom w efektywniejszej pracy.

Przygotowałem 30 lekcji e-mail, w których pokażę Ci, w jaki sposób pracować efektywniej i szybciej w Visual Studio. Poznasz dodatki, bez których nie wyobrażam sobie pracy w tym IDE.

Po więcej informacji zapraszam na dedykowaną stronę kursu: Darmowy Kurs Visual Studio.

Quiz C#

Ostatnio przygotowałem również quiz C#, w którym możesz sprawdzić swoją wiedzę. Podejmiesz wyzwanie?

Jakie są typy filtrów akcji ASP.NET MVC?

Do dyspozycji mamy 4 typy filtrów:

  • Authorization – logika uwierzytelnia i autoryzacji – uruchamiana przed wykonaniem akcji – możemy np. zablokować dostęp do akcji dla użytkownika, który nie ma określonych uprawnień
  • Action – logika odpalana przed wykonaniem akcji i po jej wykonaniu (ale jeszcze przed wykonaniem wyniku akcji, np. wygenerowaniem widoku)
  • Result – logika odpalana przed wykonaniem wyniku akcji i po wykonaniu go (po wygenerowaniu widoku)
  • Exception – logika odpalana tylko w momencie, gdy wystąpił błąd.

W ASP.NET MVC filtry akcji zostały zaimplementowane w formie atrybutów, którymi dekorujemy akcje w kontrolerze lub sam kontroler.

Wbudowane filtry akcji

Microsoft udostępnia nam kilka wbudowanych filtrów akcji, dostarczonych razem z samym ASP.NET MVC. Są to między innymi (w nawiasie typ filtra):

  • Authorize (Authorization) – możliwość określania, jaka rola lub użytkownik ma uprawnienie do wykonania akcji
  • RequireHttps (Authorization) – określa wymaganie użycia protokołu HTTPS do obsługi żądania – na przykład aby nie przesyłać loginu i hasła przez sieć jawnym tekstem
  • OutputCache (Result) – cache dla wyników akcji – np. wygenerowany widok, dzięki czemu aplikacja działa szybciej
  • HandleError (Exception) – służy do obsługi nieobsłużonych wyjątków i wyświetlenia ładnej strony z informacją o błędzie zamiast na przykład ekranu z wyjątkiem, w którym jest login i hasło do bazy. 😉

W jaki sposób użyć filtrów?

Filtrów akcji możemy użyć na 3 poziomach:

  • Pojedynczej akcji – konkretną akcję dekorujemy filtrem jako atrybut:
public class HomeController : Controller
{
[HandleError]
public ActionResult Index()
{
return View();
}
}
  • Całego kontrolera – atrybutem dekorujemy cały kontroler:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
  • Całej aplikacji – w katalogu App_Start jest klasa FilterConfig, za pomocą której rejestrujemy filtr globalnie w całej aplikacji:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}

W kolejnym artykule pokażę, w jaki sposób napisać własne filtry akcji ASP.NET MVC na przykładzie autoryzacji z wykorzystaniem logiki biznesowej.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.