Pregunta

He decorado mi controlador de base con un par de filtros de acción. Ellos trabajan muy bien.

Uno de esos filtros configura la petición -. Hace cosas como establecer la cultura basada en el dominio, etc.

También tengo un puñado de acciones que requieren la autorización mediante el atributo Autorizar.

Mi problema es que cuando un usuario intenta solicitar una página que no están autorizados a acceder, las patadas de filtro en la autorización y los redirige a una página diciéndoles que no pueden competir la página.

El problema es que los filtros de acción nunca se quede por lo que la cultura y otros datos de solicitud nunca se fija. Esto hace que efectivamente el lenguaje para estar mal de la vista y otros datos que faltan.

Yo sé que los filtros de autorización se ejecutan primero, pero mi pregunta es la siguiente: ¿Cómo puedo diseñar este tal que puedo asegurar que ciertos métodos siempre se ejecutan antes que la vista se devuelve, independientemente de la autorización

.

La esperanza que tiene sentido.

¿Fue útil?

Solución

De acuerdo con esta href="http://msdn.microsoft.com/en-us/library/gg416513%28v=vs.98%29.aspx" documentación (bajo el encabezado Filtro Orden), Autorización de filtros siempre se ejecuta antes de los filtros de acción. Esto significa que jugar con propiedades Order no ayudará.

Creo que la mejor manera de manejar esto es para escribir su propio atributo de autorización (subclasificando AuthorizeAttribute y AuthorizeCore primordial) y el funcionamiento de su acción filtra de forma manual cuando la autorización falla.

Otros consejos

Consulte orden de ejecución de los filtros de acción en artículo MSDN en acción de filtro

Básicamente, se puede suministrar una propiedad Order de esos filtros de cultivo para que se ejecute antes el filtro de autorización, algo como esto:

[CultureRedirect(Order = 1)]
public class MyBaseController : Controller { }

[Authorize(Order = 2)]
public class RequiresAuth : MyBaseController { }

...

Si eso no funciona, todavía puede ejecutar código bfore una acción ejecuta y antes de cualquier ActionFilter se ejecuta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top