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

Sai*_*uli 16 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();
}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试导航到安全操作时,我得到404页面未找到错误.

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

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,Authorize属性应该导致401未经授权的HTTP响应,应该由身份验证处理程序拦截并将我重定向到loginUrl.哪个应该导致Account/LogOn操作.

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

Fia*_*acc 15

它不再适用于RTM

你需要添加

<add key="loginUrl" value="~/Account/LogOn" />
Run Code Online (Sandbox Code Playgroud)

到Web.Config中的appSettings

问题出在WebMatrix.WebData中的ConfigUtil中

private static string GetLoginUrl()
{

    return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl;
}



staticFormsAuthenticationSettings()
{
    LoginUrlKey = "loginUrl";
    DefaultLoginUrl = "~/Account/Login";
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该成为接受的答案! (2认同)

Dav*_*ner 10

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

解决方法是添加此条目:

<add key="autoFormsAuthentication" value="false" />
Run Code Online (Sandbox Code Playgroud)

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

  • 我正在使用MVC 3 RTM,我发现这个错误再次出现,而appSettings的关键解决方法并没有解决它.重现的步骤:1)添加新的MVC 3网站(包含所有"Home","Account"控制器的东西.2)将[Authorize]设置为HomeController类.此时,没有问题 - 重定向到web.config中的任何内容.但是,如果我3)将_ViewStart.cshtml文件移动到应用程序的根目录(因此我所在区域中的所有视图也将使用基本布局),那么我会收到404帐户/登录问题.我认为它源于_ViewStart文件.使用该功能时,我发现了几个古怪的东西. (2认同)
  • 这个设置本身并没有解决问题; 我必须添加<add key ="enableSimpleMembership"value ="false"/>以及Windows身份验证才能工作. (2认同)