HTTP 错误 401.2 - 未经授权(对于 DefaultDocument)
HTTP Error 401.2 - Unauthorized (for DefaultDocument)
我在 VS2013(和 IIS)的默认文档中收到 401.2 错误。以下是我正在采取的步骤:
- 在VS2013中,右击选择"New Project"
- 选择"ASP.NET Web Application",点击确定
- 选择"Empty"项目,勾选最下方的"Web Forms",点击确定
- 右键单击项目并选择 "Add | Web Form" - 命名
Default.aspx 页面内容"Authentication Succeeded"
- 右键单击项目并选择 "Add | Web Form" - 命名
Login.aspx
- 添加一个"Login"作为页面内容
- 分配一个 "Authentication" 事件处理程序来设置“e.Authenticated
= 真
- 更新 web.config 如下所列
- 按 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 模块。
我在 VS2013(和 IIS)的默认文档中收到 401.2 错误。以下是我正在采取的步骤:
- 在VS2013中,右击选择"New Project"
- 选择"ASP.NET Web Application",点击确定
- 选择"Empty"项目,勾选最下方的"Web Forms",点击确定
- 右键单击项目并选择 "Add | Web Form" - 命名 Default.aspx 页面内容"Authentication Succeeded"
- 右键单击项目并选择 "Add | Web Form" - 命名 Login.aspx
- 添加一个"Login"作为页面内容
- 分配一个 "Authentication" 事件处理程序来设置“e.Authenticated = 真
- 更新 web.config 如下所列
- 按 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 模块。