C# 如何根据状态代码创建动态自定义错误页?

C# 如何根据状态代码创建动态自定义错误页?,c#,asp.net,iis,http-error,C#,Asp.net,Iis,Http Error,我正在尝试创建动态自定义web表单错误页面,其中内容会根据状态代码进行更改。我在web.config中配置了httpErrors,如下所示: <httpErrors errorMode="Custom" defaultPath="\errorpages\ErrorPage.aspx" defaultResponseMode="ExecuteURL" existingResponse="Auto" allowAb

我正在尝试创建动态自定义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>

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

我希望有一个文件的所有错误,而不是4个不同的文件


我尝试使用Server.GetLastError(),但无论我将其放在Global.asax Page_Error(object sender,EventArgs e)方法还是代码隐藏文件中,它都始终为空。

您可以添加一个带有状态代码的查询字符串,并在错误页面上处理它,以显示正确的内容。 因此,首先将代码添加为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>

整数误差=0;
字符串errorname=“”;
受保护的无效页面加载(对象发送方、事件参数e)
{
//检查是否有代码
if(Request.QueryString[“code”!=null)
{
//密码正确吗
int.TryParse(Request.QueryString[“code”],out错误);
}
如果(错误==403)
{
errorname=错误+“禁止”;
}
否则如果(错误==404)
{
errorname=错误+“未找到”;
}
否则如果(错误==500)
{
errorname=错误+“服务器错误”;
}
其他的
{
errorname=“未处理的错误”;
误差=500;
}
}
MySiteName-

您可以添加带有状态代码的查询字符串,并在错误页面上处理该字符串,以显示正确的内容。 因此,首先将代码添加为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>

整数误差=0;
字符串errorname=“”;
受保护的无效页面加载(对象发送方、事件参数e)
{
//检查是否有代码
if(Request.QueryString[“code”!=null)
{
//密码正确吗
int.TryParse(Request.QueryString[“code”],out错误);
}
如果(错误==403)
{
errorname=错误+“禁止”;
}
否则如果(错误==404)
{
errorname=错误+“未找到”;
}
否则如果(错误==500)
{
errorname=错误+“服务器错误”;
}
其他的
{
errorname=“未处理的错误”;
误差=500;
}
}
MySiteName-

path=“/errorpages/errorpages.aspx?error=404”
处理错误页面上的查询字符串并显示基于此的内容。我想知道为什么人们应该让生活更美好difficult@VDWWD非常感谢,它是这样工作的。@VDWWD为什么不把你的评论放在“答案”中,这样Alux就可以接受它,Alux和你就可以获得分数,而其他有同样问题的人也可能受益?双赢-win@Roland. 好主意。
path=“/errorpages/errorpages.aspx?error=404”
处理错误页面上的查询字符串并显示基于此的内容。我想知道为什么人们应该让生活更美好difficult@VDWWD非常感谢,它是这样工作的。@VDWWD为什么不把你的评论放在“答案”中,这样Alux就可以接受它,Alux和你就可以获得分数,而其他有同样问题的人也可能受益?双赢-win@Roland. 好主意。