首页 > 解决方案 > 如何根据状态码创建动态自定义错误页面?

问题描述

我正在尝试创建动态自定义 Web 表单错误页面,其中内容根据状态代码而变化。我在 web.config 中配置了 httpErrors,如下所示:

<httpErrors errorMode="Custom" defaultPath="\errorpages\ErrorPage.aspx" defaultResponseMode="ExecuteURL" existingResponse="Auto" allowAbsolutePathsWhenDelegated="true" >
      <remove statusCode="503" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="401" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="503" responseMode="ExecuteURL" path="/errorpages/ErrorPage.aspx" />
      <error statusCode="500" responseMode="ExecuteURL" path="/errorpages/ErrorPage.aspx" />
      <error statusCode="401" responseMode="ExecuteURL" path="/errorpages/ErrorPage.aspx" />
      <error statusCode="404" responseMode="ExecuteURL" path="/errorpages/ErrorPage.aspx" />
    </httpErrors>

问题:如何在页面呈现之前获取代码隐藏文件中的状态代码,以便它根据状态代码更改内容?

我希望为所有错误提供 1 个文件,而不是 4 个不同的文件。

我尝试使用 Server.GetLastError(),但无论我把它放在 Global.asax Page_Error(object sender, EventArgs e) 方法还是文件后面的代码中,它总是为空。

标签: c#asp.netiishttp-error

解决方案


您可以添加带有状态代码的 QueryString 并在错误页面上处理它以显示正确的内容。所以首先将代码添加为 Querystring

<error statusCode="404" path="/errorpages/ErrorPage.aspx?code=404" />

然后ErrorPage.aspx页面你可以做这样的事情

<%@ Page Language="C#" %>

<script runat="server">

    int error = 0;
    string errorname = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        //check if there is a code
        if (Request.QueryString["code"] != null)
        {
            //is the code a correct number
            int.TryParse(Request.QueryString["code"], out error);
        }

        if (error == 403)
        {
            errorname = error + " Forbidden";
        }
        else if (error == 404)
        {
            errorname = error + " Not Found";
        }
        else if (error == 500)
        {
            errorname = error + " Server Error";
        }
        else
        {
            errorname = "Unhandled Error";
            error = 500;
        }
    }

</script>

<html>
<head>
    <title>MySiteName - <%= errorname %></title>
</head>
<body>
    <center>
        <a href="/">
            <img src="/images/<%= error %>.png" border="0" vspace="50">
        </a>
    </center>
</body>
</html>

推荐阅读