none
关于认证失败后错误画面的问题 RRS feed

  • 问题

  • 大家好:
        
        我在服务器端返回的错误码为Response.StatusCode = 401, 之后浏览器显示的错误页面为"Access Denied", 请问要怎么样才能返回错误信息为“You are not authorized to view this page” 的页面呢?
        我尝试过Response.SubStatusCode,但是貌似这个只能支持IIS7.0,我这是6.0(Windows Server 2003),请问有什么办法么?
    2009年8月24日 11:07

答案

  • 你好,请参考

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

    jon.valett@gmail.com
    2009年8月24日 14:19
    版主
  • mode="RemoteOnly" 修改为On,不然你本地看不到错误信息的自定义界面!

    jon.valett@gmail.com
    • 已建议为答案 mldark 2009年8月25日 13:42
    • 已标记为答案 KeFang Chen 2009年8月26日 2:21
    2009年8月25日 10:08
    版主
  • context.Response.StatusCode = 401;应该只是将StatusCode设置成401而已~对输出内容似乎并不会有改变~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    • 已建议为答案 mldark 2009年8月25日 13:42
    • 已标记为答案 KeFang Chen 2009年8月26日 2:21
    2009年8月25日 11:52
    版主
  • context.Response.StatusCode = 401;应该只是将StatusCode设置成401而已~对输出内容似乎并不会有改变~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    我和 Snowdream 版主的想法一样,你可以 StatusCode 做为方法的返回值,比如 0 为成功, 其它为错误代码,验证页面获取到这个值根据你的需要使用 Response.Redirect 跳转到指定页面。
    知识改变命运,奋斗成就人生!
    • 已建议为答案 mldark 2009年8月25日 13:42
    • 已标记为答案 KeFang Chen 2009年8月26日 2:21
    2009年8月25日 13:36
    版主

全部回复

  • 你好,你可以设计一些友好的错误页面或错误信息,捕获到错误时根据错误代码显示你预先设计的信息提示或跳转到预先设计的页面。
    知识改变命运,奋斗成就人生!
    2009年8月24日 11:51
    版主
  • 你好,请参考

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

    jon.valett@gmail.com
    2009年8月24日 14:19
    版主
  • 谢谢两位的回答,但是仍然没有解决
    2009年8月25日 7:28
  • 方法就是上面说的了,请问你是在哪个细节上遇到问题了?
    知识改变命运,奋斗成就人生!
    2009年8月25日 7:34
    版主
  • 上面的代码是要放在你想提供自定义错误页面的最外层文件夹的web.config中~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    2009年8月25日 9:31
    版主
  • To Snowdream:

        你好。是放在最外层的的。而且该文件中设置的"defaultRedirect="DefaultErrorPage.htm"就没有问题。

    To X.X.Y:

        你好。具体情况是我想在用户验证不通过时显示一个错误页面,代码如下:
    //  Extract the basic authentication credentials from the request            
                    if (!ExtractBasicCredential(authorizationHeader, ref userName, ref passWord, ref domainName))
                    {
                        context.Response.StatusCode = 401;
                        return;
                    }
    
                    // Validate the user credentials 
                    if (!ValidateCredential(userName, passWord, domainName))
                    {
                        context.Response.StatusCode = 401;
                        return;
                    }
    然后在 web.config 中有:
    <customErrors mode="RemoteOnly" defaultRedirect="DefaultErrorPage.htm">
                <error statusCode="401" redirect="Unauthenticated.htm"/>
            </customErrors>
    2009年8月25日 10:06
  • mode="RemoteOnly" 修改为On,不然你本地看不到错误信息的自定义界面!

    jon.valett@gmail.com
    • 已建议为答案 mldark 2009年8月25日 13:42
    • 已标记为答案 KeFang Chen 2009年8月26日 2:21
    2009年8月25日 10:08
    版主
  • To 邹俊才:

    你好,我是部署到远程之后访问的,不是本地调试

    2009年8月25日 10:50
  • context.Response.StatusCode = 401;应该只是将StatusCode设置成401而已~对输出内容似乎并不会有改变~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    • 已建议为答案 mldark 2009年8月25日 13:42
    • 已标记为答案 KeFang Chen 2009年8月26日 2:21
    2009年8月25日 11:52
    版主
  • context.Response.StatusCode = 401;应该只是将StatusCode设置成401而已~对输出内容似乎并不会有改变~
    宠辱不惊,看庭前花开花落。去留无意,望天上云卷云舒。
    我和 Snowdream 版主的想法一样,你可以 StatusCode 做为方法的返回值,比如 0 为成功, 其它为错误代码,验证页面获取到这个值根据你的需要使用 Response.Redirect 跳转到指定页面。
    知识改变命运,奋斗成就人生!
    • 已建议为答案 mldark 2009年8月25日 13:42
    • 已标记为答案 KeFang Chen 2009年8月26日 2:21
    2009年8月25日 13:36
    版主
  • 你好,你可以使用一个抓包工具,看一下返回来的HTTP头是否真的是401。
    jon.valett@gmail.com
    2009年8月25日 13:44
    版主