所以,我正在开发一个MVC3网站。我正在本地开发,然后构建服务器在签入时运行,并在构建工作时将其推送到开发服务器。
Win7中的本地文件夹,VS2010 SP1使用IIS Express作为本地Web服务器。服务器是Win2k8 Server R2。在我的本地盒子上安装了MVC3软件包,在服务器上,我有与应用程序捆绑在一起的MVC3库,所以我不需要在盒子上安装它们。
这就是奇怪的地方。路由设置为默认为HomeController
,标记为[Authorize]
属性,因此未经身份验证的用户应首先看到的是登录页面。我正在使用表单身份验证,设置相当简单:
<authentication mode="Forms">
<forms loginUrl="~/Auth/LogIn" timeout="2880" />
</authentication>
唯一与默认值不同的是它重定向到的URL。现在,这在IIS express中完全正常。所以我承诺,它构建,推动开发。 IIS管理器中的配置编辑器确认服务器上的loginUrl
仍为~/Auth/LogIn
。这也可以直接在web.config中确认。但是,当我尝试访问该网站时,我被重定向到/Account/Login?ReturnUrl=%2f
。我知道应用程序运行正常,就好像我手动转到/Auth/Login/
,我得到登录页面,我可以登录并使用该网站。
我以前从未见过这种行为,有没有其他人遇到过这种行为,你是如何解决的?
答案 0 :(得分:3)
我们在RTM版本的MVC 3中遇到了同样的问题.Varun的回答对我来说有点困难,但最终导致了解决方案。为了让其他人明白这一点:
在您的Web.config文件中,您可能已经在&lt; system.web&gt;中找到了类似的内容。部分:
<authentication mode="Forms">
<forms loginUrl="Login/Login" defaultUrl="Home"/>
</authentication>
虽然这在Windows 7开发计算机上按预期工作,但由于某种原因它无法在Windows 2008 R2服务器上运行(某些组件的不同版本?我不知道)。为了完成这项工作,我必须将此行添加到&lt; appSettings&gt;部分:
<add key="loginUrl" value="Login/Login" />
答案 1 :(得分:1)
ScottGu answered a similar question on his blog - 这显然是MVC 3的RC2的一个错误。
解决方法是添加此条目:
<add key="autoFormsAuthentication" value="false" />
到Web应用程序的根web.config文件中的部分。
然而,这不再适用。现在您必须执行以下操作:
它不再适用于RTM
您需要添加 到Web.Config中的appSettings
问题出在WebMatrix.WebData
中的ConfigUtil中private static string GetLoginUrl()
{
return ConfigurationManager.AppSettings[FormsAuthenticationSettings.LoginUrlKey] ?? FormsAuthenticationSettings.DefaultLoginUrl;
}
staticFormsAuthenticationSettings()
{
LoginUrlKey = "loginUrl";
DefaultLoginUrl = "~/Account/Login";
}
答案 2 :(得分:0)
我有几个建议。他们都是我的想法,因为我无法在物理上检查您的开发服务器并且没有遇到过这样的问题。这些建议可能听起来很愚蠢,可能很容易被忽视,但最令人沮丧的错误是那些由我们通常不寻找的明显原因引起的错误,因为我们跳到更复杂的可能性。
在服务器级别(而不是站点级别)中,开发服务器的IIS中是否存在任何相关设置?具体来说,在Authentication - &gt;下表格认证。
开发服务器上的machine.config中是否有相关设置?
您是否尝试在开发服务器上的应用程序目录中执行full text search,查找“帐户”?
答案 3 :(得分:0)
如果Ofer Zeligs选项变干,请试试这个:
找出构建(或)部署到服务器时使用的配置,并检查相应的web.config转换文件。或者,如果您不使用web.config转换,请了解如何为不同的环境维护配置,并使用该知识查看所有维护的单独配置是否包含~/Auth/LogIn
。对于不同的环境,通常会有单独的配置文件,我看到它们不同步。