ASP.NET。自定义页面401

时间:2015-10-19 18:26:21

标签: asp.net authentication iis

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

在IE中,我已经检查了&#34;提示用户名和密码&#34; “Internet选项”中的复选框&gt; <本地Intranet>自定义级别&gt;用户认证。 我已按照http://www.codeproject.com/Articles/11202/Redirecting-to-custom-page-when-quot-Access-de中的步骤操作,它在我的本地开发服务器上运行正常。但是,在生产服务器上,这是一个不同的故事。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

在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年,因此非常怀疑&#34;现代&#34;发展。该文章的评论之一,大约5年后发布,指出了同样的问题和解决方案。