Action Filters - filtry akcji w ASP.NET MVC
Filtry akcji - zmiana wykonania akcji.
Action filters to atrybuty, które można przypisać do akcji kontrolera lub do całej klasy kontrolera (wszystkich akcji w kontrolerze), aby zmienić sposób wykonania akcji. Wszystkie filtry dziedziczą po interfejsach, dlatego możemy w łatwy sposób napisać swoje własne implementacje filtrów. Możemy również pisać własne filtry do innych metod, nie koniecznie tych z kontrolerów.
Główne typy Action Filters:
- Filtry autoryzacji (Authorization filter) - implementują interfejs IAuthorizationFilter, zostają wywołane na samym początku przed metodą i wszystkimi innymi filtrami,
- Filtry akcji (Action Filter) - implementują interfejs IActionFilter, który deklaruje 2 metody:
- OnActionExecuting - metoda wywoływana przed rozpoczęciem danej akcji,
- OnActionExecuted - metoda wywoływana po zakończeniu danej akcji.
- Filtry rezultatu (Result Filter) - implementują interfejs IResultFilter, który deklaruje 2 metody:
- OnResultExecuting - metoda wywoływana przed zwróceniem rezultatu,
- OnResultExecuted - metoda wywoływana po zwróceniu rezultatu.
- Filtry wyjątków (Exception Filter) - implementuje interfejs IExceptionFilter i zostaje wywołany, gdy wystąpi wyjątek.
Najważniejsze filtry zaimplementowane w MVC:
- AuthorizeAttribute - atrybut wymagający autoryzacji, aby wywołać daną metodę:
[Authorize]
public ActionResult Contact(int id)
{
ViewBag.Message = "Kontakt.";
}
- HandleErrorAttribute - określa, w jaki sposób mają być wyłapywane wyjątki:
[HandleError]
public ActionResult Contact(int id)
{
ViewBag.Message = "Kontakt.";
}
- RequireHttpsAttribute - wymaga połączenia szyfrowanego HTTPS:
[RequireHttps]
public ActionResult Create()
{
return View();
}
- ValidateAntiForgeryTokenAttribute - sprawdza poprawność klucza, zabezpieczenie, które zostanie opisane w rozdziale o bezpieczeństwie:
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password,
persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
- ValidateInputAttribute - wymusza walidacje danych wejściowych,
- HttpGetAttribute - metoda będzie obsługiwać tylko żądania GET, domyślnie metoda obsługuje żądania GET, dlatego nie trzeba dodawać atrybutu [HttpGet],
- HttpPostAttribute - metoda będzie obsługiwać tylko żądania POST:
[HttpPost]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
return new ExternalLoginResult(provider, Url.Action("ExternalLoginCallback",
new { ReturnUrl = returnUrl }));
}
- OutputCacheAttribute - metoda która będzie cachowana:
[OutputCache(Duration = 10, VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
Atrybuty umieszczamy w nawiasach kwadratowych []. Atrybut umieszczony przed metodą/akcją odnosi się tylko do danej akcji. Aby atrybut odnosił się do wszystkich akcji w kontrolerze należy umieścić atrybut przed klasą kontrolera.
Przykładowy kod:
[Authorize]
public class HomeController : Controller
{
//ciało klasy i akcje kontrolera
}
Więcej informacji:
http://msdn.microsoft.com/en-us/library/system.web.mvc.filterattribute(v=vs.108).aspx
Komentarze facebook (polub nasz profil na FB aby je zobaczyć):