如何根据状态代码创建动态自定义错误页面?
How to create dynamic custom error page depending on status code?
我正在尝试创建动态自定义网络表单错误页面,其中的内容会根据状态代码发生变化。我在 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) 方法还是代码隐藏文件中,它总是空的。
您可以添加带有状态代码的 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>
我正在尝试创建动态自定义网络表单错误页面,其中的内容会根据状态代码发生变化。我在 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) 方法还是代码隐藏文件中,它总是空的。
您可以添加带有状态代码的 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>