web.config中的CustomError

时间:2012-07-20 20:41:26

标签: asp.net web-config

我想设计一个通用错误页面,它通过HTTP状态错误显示不同的消息。有可能吗?

<customErrors mode="RemoteOnly" redirect="GenericErrorPage.htm">

例如,如果

 error statusCode="403"

然后显示

 Access Denied!

感谢。

1 个答案:

答案 0 :(得分:1)

是的,它可能,尝试类似的事情:

  <customErrors mode="On">
    <error redirect="~/GenericError.aspx" statusCode="404"/>
  </customErrors>

但请记住,如果您在IIS 7中托管Web应用程序,则需要按如下方式定义自定义错误:

  <system.webServer>
    <httpErrors existingResponse="Replace" errorMode="Custom">
      <remove statusCode="404"/>
      <error statusCode="404" path="GenericError.aspx" responseMode="Redirect"  />
    </httpErrors>
  </system.webServer>

编辑1

如果您想要一个通用的ASPX错误页面并根据HTML错误状态代码显示错误消息,您可以执行以下操作:

(我刚刚测试过并且有效)

将属性redirectMode="ResponseRewrite"添加到customErrors部分:

<customErrors mode="On" defaultRedirect="~/GenericError.aspx" redirectMode="ResponseRewrite" />

在通用错误页面(Page_Load事件)中:

    var ex = HttpContext.Current.Server.GetLastError();
    this.lblMessage.Text += "<br/>" + ex.Message + ex.GetType().ToString();

    if (ex is HttpException)
    {
        var nex = ex as HttpException;
        this.lblMessage.Text += " " + nex.GetHttpCode().ToString();

        switch (nex.GetHttpCode())
        {
            case 404:
                // do somehting cool
                break;
            case 503:
                // do somehting even cooler
                break;
            default:
                break;
        }
    }