2009-01-29 25 views
10

Estoy tratando de entender cómo funciona la gestión de errores cuando se utiliza el Autorizar [Autorizar] Acción de filtrado en MVC de vista previa 4.ASP.Net MVC Autorización del filtro acción

tengo una acción que se ve así:

[Authorize(Roles = "DOMAIN\\NOTAUTHORISED_ROLE")] 
[HandleError] 
public ActionResult NeedAuthorisation() 
{ 
    throw new NotImplementedException(); 
} 

Cuando visito la url: http://localhost:2197/testAuthorisation/NeedAuthorisation, aparece una página en blanco en mi navegador. En Firebug puedo ver que se realizó una solicitud y se ha devuelto un estado de respuesta de 401 - Unauthorised. Pero no se me redirecciona ni se me devuelve un error personalizado. Todo funciona como se espera al usar un rol para el que estoy autorizado.

Esto está utilizando la autenticación de Windows. Estoy escribiendo un código para probar la autenticación de Forms para ver si recibo el mismo problema. Tengo <customerrors mode="On"/> configurado y he creado páginas de error, tanto en la carpeta de prueba de autorización como en la carpeta compartida.

Respuesta

11

Finalmente encontré this MVC tutorial que resolvió mi problema:

exactamente lo que sucede cuando se intenta invocar una acción de controlador sin los permisos adecuados depende del tipo de autenticación habilitada. De forma predeterminada, cuando utiliza el servidor de desarrollo ASP.NET , simplemente obtiene una página en blanco. La página se sirve con un 401 Not Authorized HTTP Response Status.

0

Si tiene los CustomErrors configurados en Off o RemoteOnly, entonces no será redirigido a la página especificada por HandleError (el valor predeterminado es Error.aspx). Configúrelo en "Activado" y luego vea qué sucede. Todas las páginas de error personalizado que especifique explícitamente tendrán prioridad, sin embargo, por lo que necesita para eliminar estos, y tienen simplemente:

<customErrors mode="On" />

+0

Gracias, pero ya tengo instalados los customErrors. No está ayudando a – Lewis

0

Hace falta un programa de vista de error en la carpeta vista correspondiente, es decir, se necesita el archivo de Views/TestAuthorization/Error.aspx para que todo aparezca.

También puede customize this comportamiento por qué vista que desea utilizar y con qué excepción desea que se desencadene.

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]] 
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]] 
+0

Gracias, pero ya tengo la vista de error y tengo una en la carpeta compartida. Ambos funcionan como esperaba (cuando arrojo una NotImplementedException de ese método, por ejemplo). – Lewis

Cuestiones relacionadas