【问题标题】:ASP.NET. Custom Page on 401ASP.NET。 401上的自定义页面
【发布时间】:2015-10-19 18:26:21
【问题描述】:

我有一个需要 Windows 身份验证的网页 (home.aspx)。如果浏览器自动发送有效凭据,则会显示 home.aspx。否则,将显示 login.aspx。

在 IE 中,我已在 Internet 选项 > 本地 Intranet > 自定义级别 > 用户身份验证中选中“提示输入用户名和密码”复选框。 我已经按照http://www.codeproject.com/Articles/11202/Redirecting-to-custom-page-when-quot-Access-de 中的步骤操作,它在我的本地开发服务器上运行良好。但是,在生产服务器上,情况就不同了。

在 IIS 中,Home.aspx 禁用了匿名身份验证,并启用了 Windows 身份验证。 Login.aspx 启用了匿名身份验证并禁用了 Windows 身份验证。

在开发服务器中,在使用正确凭据登录的计算机上,会显示 home.aspx。并且,当浏览器未发送凭据时,Application_EndRequest 会出现 401 状态代码,然后默认的 Windows 身份验证提示显示。 取消此对话框后,将显示 login.aspx。这是正确的行为。

但是,在生产服务器中,在使用正确凭据登录的计算机上,会显示 home.aspx。而且,当浏览器未发送凭据时,Application_EndRequest 会出现 401 状态代码,然后显示默认的 Windows 身份验证提示。取消此对话框后,显示默认的401页面。

谁知道生产服务器上发生了什么,以及为什么我无法拦截 401 状态代码并重定向到自定义网页。

【问题讨论】:

  • 我面前没有示例代码可作为示例发布,但听起来您需要允许从 web.config 或安全设置匿名访问 login.aspx。否则,IIS 不会在没有有效凭据的情况下为其提供服务。
  • 感谢您的回复。我启用了对 login.aspx 的匿名访问,并禁用了 windows 身份验证,但仍然遇到同样的问题。

标签: asp.net authentication iis


【解决方案1】:

在 IIS 7 中,他们在 web.config 中添加了一个属性,用于控制自定义错误的行为。默认情况下,自定义错误和详细错误仅显示在本地浏览器上。要显示您的自定义错误,您需要在 web.config <httpErrors> 元素 errorMode 属性中进行更改。

<configuration>
   <system.webServer>
      <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
         <remove statusCode="500" />
         <error statusCode="500"
            prefixLanguageFilePath="C:\Contoso\Content\errors"
            path="500.htm" />
       </httpErrors>
   </system.webServer>
</configuration>

DetailedLocalOnly 是默认值;其他可能的值为DetailedCustom

如需更多阅读,这里是讨论此配置的Microsoft article

除此之外:您链接的文章已有 10 多年的历史,因此非常怀疑“现代”发展。大约 5 年后发布的文章中的一个 cmet 指出了同样的问题和解决方案。

【讨论】:

  • 我已将errorMode设置为Detailed,现在它不会重定向到login.aspx。但是,它显示 home.aspx 的空白页面。当我在 IE 中查看源代码时,这是全部内容:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2012-03-09
  • 2012-06-01
  • 2011-07-10
  • 1970-01-01
  • 2013-05-04
  • 2011-05-19
相关资源
最近更新 更多