如何在Windows身份验证中使用自定义错误页面

时间:2011-03-18 06:07:40

标签: .net asp.net web-config custom-error-pages

我正在使用asp.net 3.5 web.config来限制访问,而且效果很好。

<authentication mode="Windows">
<authorization>
    <allow users="Bill, John"/>
    <deny users="*"/>
</authorization>

系统错误消息将阻止未经授权(但已通过身份验证)的用户:

Server Error in '/' Application
Access is denied.
Description: An error occurred while .......
Error message 401.2: Unauthorized: Logon failed due to server configuration ...

为了使消息更友好,我取消注释customErrors标志并在项目的根路径中创建GenericErrorPage.htm。

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
    <error statusCode="403" redirect="NoAccess.htm" />
    <error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>

然而,它只是不起作用。我仍然收到系统错误消息而不是我的自定义错误页面。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:10)

您将看不到它 - 自定义错误页面由ASP.NET应用程序提供,但Windows身份验证由IIS本身提供。

现在您可以将IIS设置为使用不同的错误页面。对于IIS7,这需要separate configuration section;

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto">
    <error statusCode="403" 
           subStatusCode="-1" 
           prefixLanguageFilePath="" 
           path="C:\inetpub\wwwroot\errors\403.htm" 
           responseMode="File" />
  </httpErrors>
</system.webServer>

您需要确保应用程序池用户可以访问该路径。

答案 1 :(得分:4)

在其他情况下没有对此进行测试,但是查看了detailed article针对类似问题的一些建议。

另一个问题原来是:

  

授权要求阻止了对错误页面的访问

解决方案是在web.config中使用 属性。请参阅链接以获取更详细的说明,但这里是一个片段:

<!-- in the same root web config file-->
<configuration>
    <system.web>
        <authorization>
        <allow users="Bill, John"/>
        <deny users="?" />
        </authorization>
    </system.web>

    <!-- the page specific authorization-->   
    <location path="GenericErrorPage.htm"> <!-- other ones for your other pages-->
        <system.web>
        <authorization>
        <allow users="*" />
        </authorization>
        </system.web>
    </location>

</configuration>

答案 2 :(得分:-1)

改变:

<customErrors mode="RemoteOnly" />

mode属性可以是以下之一:

* On – error details are not shown to anybody, even local users. If you specified a custom error page it will be always used.
* Off – everyone will see error details, both local and remote users. If you specified a custom error page it will NOT be used.
* RemoteOnly – local users will see detailed error pages with a stack trace and compilation details, while remote users with be presented with a concise page notifying them that an error occurred. If a custom error page is available, it will be shown to the remote users only.

向访问者显示一个简洁但不那么漂亮的错误页面仍然不够好,所以你需要整理一个自定义错误页面并以这种方式指定:

<customErrors
       mode="RemoteOnly" 
       defaultRedirect="~/errors/GeneralError.aspx" 
/>