我在VS2013(和IIS)中的默认文档上收到401.2错误。以下是我采取的步骤:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="Login.aspx" />
</authentication>
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
</files>
</defaultDocument>
<security>
<authorization>
<remove users="*"/>
<add accessType="Deny" users="?" />
<add accessType="Allow" users="*"/>
</authorization>
</security>
</system.webServer>
</configuration>
&#13;
我看到的行为是http://localhost:12345/Default.aspx行为正常(始终)。换句话说,当我第一次转到Default.aspx时,它会将我重定向到Login.aspx页面。一旦我通过身份验证,我就可以看到Default.aspx页面。如果我注销并尝试再次转到Default.aspx页面,它会将我重定向到首先登录。
然而,当我得到/ URL(没有Default.aspx)时,我收到401.2错误(即使我已经通过第一次验证)?
Default.aspx页面被列为默认文档,如果我删除&#34;拒绝&#34;来自Web.Config的行 - 然后默认文档按预期运行。但是当Deny?在Web配置中列出,突然默认文档停止工作,我必须转到/Default.aspx以避免401.2错误。
为什么会出现这样的行为?
我在事件日志中看到没有任何错误。当使用IISExpress(在VS中按F5)或使用IIS直接通过浏览器访问公共URL时,我看到相同的行为。
答案 0 :(得分:2)
我毫不犹豫地提供这个答案,因为我不明白为什么它对我有用。但是评论时间太长,可能对您有所帮助。
我发现将以下内容添加到System.Webserver
部分可以解决此问题:
<modules>
<remove name="FormsAuthentication"/>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
</modules>
关键似乎是从FormsAuthentication模块中删除managedHandler
前置条件。据我了解,这只是为了优化静态内容的服务。所以我不知道为什么它会产生这种效果。我偶然发现了这个尝试确定是否需要在System.Webserver
部分注册FormsAuthentication模块。