2015-10-19 77 views
0

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

在IE中,我已选中Internet选项>本地内联网>自定义级别>用户认证中的“提示输入用户名和密码”复选框。 我遵循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身份验证提示将显示enter image description here。 取消此对话框后,显示login.aspx。这是正确的行为。

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

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

+0

我没有示例代码在我面前作为示例发布,但听起来像您需要允许从web.config或安全设置中匿名访问login.aspx。否则,如果没有有效的证书,IIS将不会提供它。 – GalacticCowboy

+0

感谢您的回复。我启用了对login.aspx的匿名访问,并禁用了Windows身份验证,但仍然遇到同样的问题。 – user2769810

回答

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来讨论这种配置。

Aside:您链接的文章已超过10年,因此对于“现代”开发颇为怀疑。其中一篇关于5年后发布的文章的评论指出了同样的问题和解决方案。

+0

我已经将errorMode设置为Detailed,现在它不会重定向到login.aspx。但是,它显示home.aspx的空白页面。当我在IE中查看源代码时,这是整个内容:。这是关闭的JavaScript代码没有被打到。 – user2769810