新的Asp.Net MVC5项目为登录页面产生无限循环

Pat*_*ins 73 asp.net asp.net-mvc visual-studio-2013 asp.net-mvc-5

我正在使用Visual Studio 2013创建一个全新的项目,我选择Asp.Net MVC和框架4.5.1项目已创建,然后,我除了F5之外什么都不做以启动默认网页.不幸的是,它产生了一个重定向到登录页面,该页面也重定向到登录页面.这是我在浏览器中的网址的简短版本:

http://localhost:5285/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525
Run Code Online (Sandbox Code Playgroud)

我在事件查看器中没有任何错误.但在屏幕上我看到:

"HTTP错误404.15 - 未找到请求过滤模块配置为拒绝查询字符串太长的请求."

该网站使用IIS Express中的默认设置运行.我该如何解决这个问题?我猜我的Visual Studio 2013出了什么问题?

编辑

如果我创建一个全新的网站并将其托管在IIS中,它就可以工作.但是如果我创建一个新网站(没有修改任何东西)并且只是点击播放(默认启动IIS Express),它就不会.

编辑2

我删除了Documents\IISExpress\config\applicationhost.config中的每个网站.我重新编译了所有内容,并创建了此条目:

    <siteDefaults>
        <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
        <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
    </siteDefaults>
    <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
    <virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Run Code Online (Sandbox Code Playgroud)

我仍然遇到IIS Express的错误,而不是IIS.

Rob*_*345 65

在Visual Studio中突出显示该项目

打开右侧的"属性"面板(或按F4)

将"Windows身份验证"设置为"已禁用"

将"匿名身份验证"设置为"已启用"

  • 但是如果我真的想要启用Windows身份验证并禁用匿名身份验证该怎么办 这是因为我想获取用户的Intranet应用程序的Windows登录信息. (16认同)
  • 关键是将'匿名身份验证'设置为'启用' (4认同)

use*_*341 36

此问题是由于MVC 5模板选择了(默认情况下)身份验证模式,这会触发ReturnUrl重定向样式,如果配置不正确,可能会导致无限循环.

要禁用OWIN启动发现,请将此密钥添加到webconfig文件中.

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

  • 哇,这解决了我的问题.人们应该如何找到这个?谢谢amigo. (6认同)
  • 如果我需要 owin 启动怎么办?(事实上​​我已经设置了一个startup.cs) (2认同)

Nen*_*nad 34

您缺少[AllowAnonymous]登录操作的属性.

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    // code....
}
Run Code Online (Sandbox Code Playgroud)

第二种可能性,仅针对IIS Express:如果您WebApplication1多次创建相同的默认项目,使用不同的身份验证设置,IIS Express会在其配置文件中存储其他身份验证设置.就像是:

    <location path="WebApplication1">
        <system.webServer>
            <security>
                <authentication>
                    <windowsAuthentication enabled="true" />
                    <anonymousAuthentication enabled="false" />
                </authentication>
            </security>
        </system.webServer>
    </location>
</configuration>
Run Code Online (Sandbox Code Playgroud)

配置位于用户的Documents文件夹中Documents\IISExpress\config\,您应该查找:

applicationhost.config
Run Code Online (Sandbox Code Playgroud)

然后只需删除<location path="WebApplication1">上面提到的xml节点.


VS 2015+更新

如果您使用的是Visual Studio 2015或更高版本,请检查配置文件的此路径: $(solutionDir)\.vs\config\applicationhost.config

每个解决方案都有自己的配置文件.


小智 7

我不得不删除(Source Link):

<authorization>
  <deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)


Luk*_* Vo 6

我知道我可能会迟到,这不是直接针对OP的问题.但如果将来有人来到这里,还有一个检查AllowAnonymousAuthorize属性是,你必须检查所有的孩子行为.

例如,我有我的布局(登录页面也使用),它为面包屑和侧边栏调用2个子操作,并且它们没有AllowAnonymous属性(Controller具有Authorize属性).

希望这有帮助.


小智 5

在IIS中,选择您的网站并检查身份验证,如果您使用的是表单身份验证,则 -

  1. 将"Windows身份验证"设置为"已禁用",
  2. 将"匿名身份验证"设置为"已启用"
  3. 将"表单身份验证"设置为"已启用"


Pat*_*ins 1

请注意,这是潜在有害的建议,直接修改 applicationhost 配置文件很少是个好主意,通常有一些工具可以安全地为您执行此操作(例如,从 Visual Studio 中)。在继续之前,请确保创建此文件的备份副本,以防您的 IIS Express 被丢弃。

为了解决这个问题,我使用了位于此处的默认 IIS 配置文件:

C:\Windows\System32\inetsrv\config\applicationHost.config
Run Code Online (Sandbox Code Playgroud)

到我的文档

%userprofile%\documents\iisexpress\config\applicationhost.config
Run Code Online (Sandbox Code Playgroud)

它奏效了。

这是因为我设置了一些 Windows 身份验证,而不是匿名帐户。