ASP.NET MVC Beta Authorize属性将我发送到错误的操作

时间:2010-10-06 22:18:38

标签: asp.net-mvc authorize-attribute asp.net-mvc-3

今天我开始玩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中的错误吗?

4 个答案:

答案 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>

它对我有用。取出模式,它会给你带来麻烦。