HTTP 错误 401.2 - 未经授权(对于 DefaultDocument)

HTTP Error 401.2 - Unauthorized (for DefaultDocument)

我在 VS2013(和 IIS)的默认文档中收到 401.2 错误。以下是我正在采取的步骤:

  1. 在VS2013中,右击选择"New Project"
  2. 选择"ASP.NET Web Application",点击确定
  3. 选择"Empty"项目,勾选最下方的"Web Forms",点击确定
  4. 右键单击项目并选择 "Add | Web Form" - 命名 Default.aspx 页面内容"Authentication Succeeded"
  5. 右键单击项目并选择 "Add | Web Form" - 命名 Login.aspx
  6. 添加一个"Login"作为页面内容
  7. 分配一个 "Authentication" 事件处理程序来设置“e.Authenticated = 真
  8. 更新 web.config 如下所列
  9. 按 F5

<?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>

我看到的行为是 http://localhost:12345/Default.aspx 行为正确(始终)。换句话说,当我第一次访问 Default.aspx 时,它会将我重定向到 Login.aspx 页面。通过身份验证后,我可以看到 Default.aspx 页面。如果我注销并再次尝试转到 Default.aspx 页面,它会将我重定向到先登录。

但是,当我得到 /URL 时(没有 Default.aspx),我收到 401.2 错误(即使我已经验证了 1st)?

Default.aspx 页面被列为默认文档,如果我从 Web.Config 中删除 "Deny" 行 - 那么默认文档会按预期运行。但是什么时候拒绝?在 web 配置中列出,默认文档突然停止工作,我必须转到 /Default.aspx 以避免 401.2 错误。

关于为什么会这样的任何建议?

我在事件日志中没有看到任何关于此的错误。使用 IISExpress(在 VS 中按 F5)或使用 IIS 直接通过浏览器访问 public URL 时,我看到了相同的行为。

我不太愿意提供这个作为答案,因为我不明白为什么它对我有用。但是评论太长了,可能对你有帮助。

我发现将以下内容添加到 System.Webserver 部分可以解决此问题:

<modules>
<remove name="FormsAuthentication"/>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"  />
</modules> 

关键似乎是从 FormsAuthentication 模块中删除 managedHandler 先决条件。据我了解,这只是为了优化静态内容的服务。所以我现在不知道为什么会产生这种效果。我偶然发现了这个试图确定是否需要在 System.Webserver 部分中注册 FormsAuthentication 模块。