我有一个我从未遇到的奇怪错误。
我通过以下方式获得了一个控制器:
[Authorize(Roles = "admin")]
public class LoggingController : Controller
当非管理员用户尝试访问任何受保护的内容时,会将其重定向到:
http://localhost:50501/Account/Login?ReturnUrl=%2flogging
注意:帐户/ 登录而非帐户/ 登录
AccountController.Login操作不存在。
web.config有:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
我当然可以实现Login操作并重定向到Logon。 我只是感到困惑,想知道为什么会这样。
答案 0 :(得分:25)
搜索您的项目以进行登录 - 必须在某处指定。是否有任何其他web.config值覆盖此(可能正在查看子根并且正在使用父值) 还有任何正在发生的重定向吗?您的机器的web.config中是否设置了默认值? 您在项目上的默认网址是否为/ login?
安装glimpse route debugger以查看该页面正在使用哪条路线。
修改强>: 更多的研究产生了一个已知的问题。 看看这个链接: ASP.NET MVC issue with configuration of forms authentication section
Theres a mvc 3 beta中的一个错误 - 你运行beta位吗? 另请注意上面的RTM位URL中提到的项目:
<add key="loginUrl" value="~/LogOn" />
同时退房 http://forums.asp.net/p/1616153/4138366.aspx
编辑2
以下是关于@santiagoIT的潜在来源的可靠评论(如果具体细节可以帮助你,请提出他的评论)
今天我发现了这个问题的根源:我在'带有Razor语法的ASP.NET网页'上添加了'可部署依赖'。这会添加对以下内容的引用:WebMatrix.Data.dll此程序集有一个带有静态构造函数的类,它执行以下操作:static FormsAuthenticationSettings(){FormsAuthenticationSettings.LoginUrlKey =“loginUrl”; FormsAuthenticationSettings.DefaultLoginUrl =“〜/ Account / Login”;}这解释了!
答案 1 :(得分:3)
这对我有用,我正在使用MVC 3
<appSettings>
<add key="loginUrl" value="~/Account/LogOn" />
</appSettings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" name=".ASPXFORMSAUTH" />
</authentication>
</system.web>
此外,我发现将followinf部分添加到Web配置(仅在调试配置期间)有助于加快我的调试速度,因为必须对任何页面进行身份验证。
<authorization>
<deny users="?" /> <!-- remove after debugging -->
</authorization>
答案 2 :(得分:2)
只需删除WebMatrix dll(如果它们存在于已部署的bin文件夹中)。
答案 3 :(得分:1)
我这样修理了
1)转到IIS
2)选择你的项目
3)点击“身份验证”
4)点击“匿名身份验证”&gt;编辑&gt;选择“应用程序池标识”而不是“特定用户”。
5)完成。