今天我开始玩MVC 3 Beta。从默认MVC 3模板的应用程序开始,在Home控制器中添加了一个新操作,如下所示(带有视图)
[Authorize]
public ActionResult Secured()
{
ViewModel.Message = "This is secured area, only authenticated users should be here.";
return View();
}
现在,当我尝试导航到安全操作时,我收到404页面找不到错误。
以下是我的web.config中的身份验证部分。
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
如果我理解正确,Authorize属性应该导致401未经授权的HTTP响应,应该由身份验证处理程序拦截并将我重定向到loginUrl。哪个应该导致Account / LogOn操作。
我的MVC 2应用程序按预期工作,并将我带到Account / LogOn操作,我错过了什么?或者这是MVC 3 beta中的错误吗?
答案 0 :(得分:15)
它不再适用于RTM
您需要添加
<add key="loginUrl" value="~/Account/LogOn" />
到Web.Config中的appSettings
问题出在WebMatrix.WebData
中的ConfigUtil中private static string GetLoginUrl()
{
return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl;
}
staticFormsAuthenticationSettings()
{
LoginUrlKey = "loginUrl";
DefaultLoginUrl = "~/Account/Login";
}
答案 1 :(得分:10)
ScottGu replies to a similar question on his blog这显然是一个错误。
解决方法是添加此条目:
<add key="autoFormsAuthentication" value="false" />
到<appSettings
/&gt; Web应用程序的根web.config文件中的部分。
答案 2 :(得分:2)
在bin目录中删除WebMatrix * .dll后,一切正常。
答案 3 :(得分:0)
MVC 4表现出同样的问题。但是在MVC 4上,如果在配置文件中将身份验证模式正确设置为=“Forms”,则如下所示,问题将消失:
<authentication mode ="Forms">
<forms loginurl = "your login" timeout ="2880" slidingExpiration="true">
</authentication>
它对我有用。取出模式,它会给你带来麻烦。