2011-02-10 17 views
5

Estoy aprendiendo Asp.net MVC 3. Solo me pregunto, ¿hay alguna forma de definir un método que se ejecutará antes de ejecutar cualquier otro método de cualquier controlador? Eso significa que debería funcionar como el constructor de la clase base "Controlador".Dónde implementar funcionalidad común En Asp.net MVC

Esto incluirá algunas funcionalidades comunes como verificar la sesión del usuario/si no está conectado, redirigir a la página de inicio de sesión, de lo contrario establecer algunos valores comunes de db que se utilizarán en todas partes en la aplicación. Quiero escribirlos solo una vez, no quiero llamar a un método en cada uno de los métodos de control.

Saludos

Respuesta

7

Para eso sirven los filtros de acción. Hay algunos ya construir en el marco, como AuthorizeAttribute:

 [Authorize(Roles = "Admins")] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

Editar:

Los filtros se pueden establecer en acciones, controladores o como filtros globales.

[Authorize(Roles = "Admins")] 
public class LinkController : Controller 
{ 
    //... 
} 

Dentro Global.asax

protected void Application_Start() 
    { 
     GlobalFilters.Filters.Add(new AuthorizeAttribute { Roles = "Admins" }); 
     //... 
    } 
+0

usando esto, tendrá que utilizar este archivador en cada métodos de cada controladores, ¿verdad? Quiero evitar estos pasos. Básicamente, si extiendo la clase 'Controlador' como MyController y creo todos los otros controladores que extienden 'MyController', debería funcionar. Sin embargo, ¿es una buena solución (yo mismo la probé, buscando el consejo de un experto)? – Rana

+3

Puede usar esos atributos en el nivel de controlador de esta manera: [Autorizar] publicControyer ReportsController: Controller {}, o registrarse en su Global.asax como global para cada controlador: protected void Application_Start() {GlobalFilters.Filters.Add (new AuthorizeAttribute()); ...} – tpeczek

Cuestiones relacionadas