16

今天我开始玩 MVC 3 Beta。从默认 MVC 3 模板中的应用程序开始,在 Home 控制器中添加了一个新操作,如下所示(带有视图)

[Authorize]
public ActionResult Secured()
{
    ViewModel.Message = "This is secured area, only authenticated users should be here.";
    return View();
}

现在,当我尝试导航到 Secured 操作时,我收到 404 page not found 错误。

这是我的 web.config 中的身份验证部分。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

如果我理解正确,Authorize 属性应该会导致 401 未经授权的 HTTP 响应,该响应应该被身份验证处理程序拦截并将我重定向到 loginUrl。这应该导致帐户/登录操作。

我的 MVC 2 应用程序按预期工作,并将我带到 Account/LogOn 操作,我错过了什么吗?还是这是 MVC 3 beta 中的错误?

4

4 回答 4

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";
}
于 2011-02-18T19:14:26.727 回答
10

ScottGu 在他的博客上回答了一个类似的问题,这显然是一个错误。

解决方法是添加此条目:

<add key="autoFormsAuthentication" value="false" />

<appSettingsWeb 应用程序的根 web.config 文件中的 /> 部分。

于 2010-10-07T01:13:48.603 回答
2

在我删除 bin 目录中的 WebMatrix*.dll 后,一切正常。

于 2011-09-27T10:52:05.490 回答
0

MVC 4 表现出同样的问题。但是,在 MVC 4 上,如果身份验证模式在配置文件中正确设置为 ="Forms",如下所示,问题就会消失:

<authentication mode ="Forms">
    <forms loginurl = "your login" timeout ="2880" slidingExpiration="true">
</authentication>

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

于 2012-01-16T20:27:14.723 回答