Asp.net mvc 4 MVC4SimpleMembership在本地运行良好,但在实时服务器上导致401
我有一个使用简单成员身份的MVC4应用程序。在本地,在dev box(iisexpress)上,它可以正常工作。如果我尝试访问带有[Authorize]属性的控制器操作,我将返回到web.config中指定的登录页面Asp.net mvc 4 MVC4SimpleMembership在本地运行良好,但在实时服务器上导致401,asp.net-mvc-4,authentication,iis,simplemembership,Asp.net Mvc 4,Authentication,Iis,Simplemembership,我有一个使用简单成员身份的MVC4应用程序。在本地,在dev box(iisexpress)上,它可以正常工作。如果我尝试访问带有[Authorize]属性的控制器操作,我将返回到web.config中指定的登录页面 <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" /> </authentication> 在live server上,当我尝试访问
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
在live server上,当我尝试访问带有[Authorize]属性的控制器方法时,我确实会被引导到/Account/Login页面,但也会出现以下错误:
401-未经授权:由于凭据无效,访问被拒绝。
IIS站点身份验证配置未启用匿名和表单身份验证。应用程序池正在“网络服务”标识下运行,并且“加载用户配置文件”为True,以便使用用于身份验证的IIS本地数据库
你知道我为什么要拿到401吗
更新1
我可以确认我的_布局页面没有从中确定的标记有[Authorize]属性的任何其他控制器调用任何部分。您可能需要允许访问URL
<location path="Account/Login">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
好的,我把这个右页去掉,发现问题确实是由于登录页面上的部分视图引用,这是原始MVC4 Internet应用程序项目模板留下的
@Html.Action("ExternalLoginsList", new { ReturnUrl = ViewBag.ReturnUrl })
这个局部视图确实利用了我无意中用[Authorize]属性修饰的控制器操作
[Authorize(Users = "support,admin")]
[ChildActionOnly]
public ActionResult ExternalLoginsList(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView("_ExternalLoginsListPartial", OAuthWebSecurity.RegisteredClientData);
}
最终的总人为错误:(是否有多个
登录名操作?公共操作结果登录名()
没有字符串?AccountController是否有授权装饰?嗨@christiandev。不,只有一个登录操作。谢谢。嗨@Queti M.Porta。是的,AccountController确实有授权装饰。我尝试过删除它,但我也遇到了同样的问题。非常感谢。你能进行任何操作吗?例如主页/索引
?是吗这里有一些特别的登录视图,比如某种第三方验证码?谢谢@Queti M.Porta。我现在尝试了几种不同的location属性,但没有任何乐趣。我确实想知道这是否适用于MVC路由,然后发现其中建议:“您不能使用路由或web.config文件来保护您的MVC应用程序(任何版本)。保护MVC应用程序的唯一受支持的方法是应用Authorize属性..”。非常感谢。
[Authorize(Users = "support,admin")]
[ChildActionOnly]
public ActionResult ExternalLoginsList(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView("_ExternalLoginsListPartial", OAuthWebSecurity.RegisteredClientData);
}