route - Filtro de acción de autorización de ASP.Net MVC
tag helpers asp net core (3)
Si tiene CustomErrors configurado en Off o RemoteOnly, 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. Sin embargo, todas las páginas de error personalizadas que especifique explícitamente tendrán prioridad, por lo que deberá eliminarlas y solo tendrá:
<customErrors mode="On" />
Estoy tratando de entender cómo funciona el manejo de errores cuando se utiliza el Autorizar [Autorizar] Filtro de Acción en MVC Preview 4.
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
, obtengo 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á usando 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"/>
set y he creado páginas de error, tanto en la carpeta testAuthorisation como en la carpeta Shared.
Finalmente encontré este tutorial de MVC que resolvió mi problema:
Exactamente lo que sucede cuando intenta invocar una acción de controlador sin tener los permisos adecuados depende del tipo de autenticación habilitada. De manera predeterminada, cuando usa el Servidor de desarrollo ASP.NET, simplemente obtiene una página en blanco. La página se sirve con un estado de respuesta HTTP no autorizado 401.
Necesita una vista de error en la carpeta de vista correspondiente, es decir, necesita el archivo Views/TestAuthorization/Error.aspx
para que se muestre cualquier cosa.
También puede personalizar este comportamiento según la vista que desee usar y con qué excepción desea que se desencadene.
[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]]