2012-11-25 14 views
7

Muszę sprawdzić niektóre rzeczy (pliki cookie) dla każdego żądania przychodzącego do mojej aplikacji.MVC 3/4 HttpModule lub ActionFilter

W ASP.NET użyliśmy HttpModule do tego zadania, pytanie, co powinno być używane w MVC? Jakiś filtr globalny, czy też mogę używać HttpModuler, czy jest jakaś różnica w zapytaniu PipeLine między MVC a zwykłym ASP.NET?

Odpowiedz

11

MVC jest abstrakcją w stosunku do ASP.NET i dlatego ich "haki" naprawdę zależą od poziomu, na którym chcesz wprowadzić swoją logikę. Filtr działania pozwala na przechwycenie zdarzeń specyficznych dla MVC:

  • OnActionExecuting - Ta metoda jest wywoływana przed wykonaniem czynności kontrolera.
  • OnActionExecuted - Ta metoda jest wywoływana po wykonaniu czynności kontrolera.
  • OnResultExecuting - Ta metoda jest wywoływana przed wykonaniem wyniku działania kontrolera.
  • OnResultExecuted - Ta metoda jest wywoływana po wykonaniu działania kontrolera.

Zważywszy HttpModule tylko pozwala na podłączenie do ASP.NET (MVC, na której jest zbudowane) szczególne wydarzenia:

  • BeginRequest - Wniosek został rozpoczęty. Jeśli chcesz coś zrobić na początku żądania (na przykład wyświetlaj banery reklamowe u góry każdej strony), zsynchronizuj to wydarzenie.
  • AuthenticateRequest - Jeśli chcesz podłączyć własny niestandardowy schemat uwierzytelniania (na przykład wyszukaj użytkownika w bazie danych w celu sprawdzenia poprawności hasła), zbuduj moduł synchronizujący to zdarzenie i uwierzytelniający użytkownika w sposób, który chcesz do.
  • AuthorizeRequest - To zdarzenie jest używane wewnętrznie do implementacji mechanizmów autoryzacji (na przykład do przechowywania list kontroli dostępu (ACL) w bazie danych zamiast w systemie plików). Chociaż możesz pominąć to wydarzenie, nie ma wielu dobrych powodów, aby to zrobić.
  • PreRequestHandlerExecute - To zdarzenie występuje przed uruchomieniem procedury obsługi HTTP.
  • PostRequestHandlerExecute - To zdarzenie występuje po wykonaniu procedury obsługi HTTP.
  • EndRequest - Żądanie zostało zakończone. Możesz zbudować moduł debugowania, który zbiera informacje w ramach żądania, a następnie zapisuje informacje na stronie.

To naprawdę zależy od tego, kiedy należy wziąć udział w wydarzeniu i jakie wydarzenia są potrzebne.

3

Jeśli HttpModule działał dobrze dla Ciebie wcześniej, to będzie nadal z MVC.

Pozostałe części pytania mają dość szeroki zakres i sądzą, że równie dobrze można przeczytać dobry artykuł na temat asp.net-mvc pipeline and extensibilit y.

+0

Świetny artykuł tam – Ronnie

2

Zrobiłem podobne rzeczy, używając globalnego filtra akcji. Działa całkiem dobrze i utrzymuje twój kod zintegrowany z twoją aplikacją.

Oczywiście działa również moduł HTTP, ale będzie to oznaczać oddzielenie kodu od głównej aplikacji i utrzymywanie go oddzielnie.Jeśli twój kod nie obejmuje wielu witryn lub jest używany w wielu aplikacjach lub wymaga pracy z witrynami formularzy internetowych, użyłbym filtra globalnego.

Powiązane problemy