El atributo de Autorización Beta ASP.NET MVC me envía a una acción incorrecta
asp.net-mvc authorize-attribute (4)
Hoy comencé a jugar con el MVC 3 Beta. Comenzó con una aplicación de la plantilla MVC 3 predeterminada, agregó una nueva acción en el controlador de la casa de la siguiente manera (con una vista para ella)
[Authorize]
public ActionResult Secured()
{
ViewModel.Message = "This is secured area, only authenticated users should be here.";
return View();
}
Ahora, cuando intento ir a navegar a Acción segura, aparece un error de 404 páginas no encontradas.
Aquí está la sección de autenticación de mi web.config.
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Si lo entendí correctamente, el atributo Autorizar debería dar como resultado una respuesta HTTP no autorizada 401 que debería ser interceptada por el controlador de autenticación y redirigirme al loginUrl. Lo que debería resultar en una acción de Cuenta / Inicio de sesión.
Mi aplicación MVC 2 funciona como se esperaba y me lleva a la acción de Cuenta / Inicio de sesión, ¿me estoy perdiendo algo? o ¿Es esto un error en MVC 3 beta?
Después de eliminar WebMatrix * .dll en el directorio bin, todo está bien.
MVC 4 exhibe el mismo problema. Sin embargo, en MVC 4, si el modo de autenticación está configurado correctamente en = "Formularios" en el archivo de configuración, como en el siguiente, el problema desaparece:
<authentication mode ="Forms">
<forms loginurl = "your login" timeout ="2880" slidingExpiration="true">
</authentication>
Esto funciona para mi. Saca el modo y te da problemas.
Ya no funciona con el RTM
Necesitas agregar
<add key="loginUrl" value="~/Account/LogOn" />
a los ajustes de la aplicación en el Web.Config
Los problemas están en ConfigUtil en WebMatrix.WebData
private static string GetLoginUrl()
{
return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl;
}
staticFormsAuthenticationSettings()
{
LoginUrlKey = "loginUrl";
DefaultLoginUrl = "~/Account/Login";
}
ScottGu responde a una pregunta similar en su blog que aparentemente es un error.
La solución es agregar esta entrada:
<add key="autoFormsAuthentication" value="false" />
a la <appSettings
/> en el archivo raíz web.config de la aplicación web.