我试图对其进行设置,以便在我的asp.net网站中抛出错误时,生成的自定义错误页面会返回一个标识符,该标识符可用于在数据库中查找错误。< / p>
使用&#34; customErrors&#34;在web.config中设置自定义错误页面。功能。
<customErrors defaultRedirect="~/Error/error.aspx" mode="RemoteOnly">
<error statusCode="404" redirect="~/Error/error.aspx?status=404" />
</customErrors>
我目前正在使用会话传递差距来传递ID。
在Global.asax
中 protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = HttpContext.Current.Server.GetLastError();
var errorCode = ExceptionManager.Publish(ex);
Session["ERROR_IDENTIFIER"] = errorCode;
}
在CustomError页面中:
<%@ Page Language="C#" Debug="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Error Page</title>
<link href="/Error/css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<%
string errorIdentifier = Session["ERROR_IDENTIFIER"] == null ? "this is null" : Session["ERROR_IDENTIFIER"].ToString();
Response.Write("There's been an error. Please send this identifier to service desk -> " + errorIdentifier);
%>
</body>
<html>
不幸的是,这个工作流程中似乎发生的事情是customError页面的加载速度比global.asax的运行速度快。基本上这些是两个不同的操作,它们是分开运行的,我想这样做,以便自定义错误页面中包含正确的标识符。
谢谢, 亚历
答案 0 :(得分:1)
这个Ans可能有另一个解决方案,或者可能是这样。 我的建议是在这种情况下不使用自定义错误处理
<customErrors mode="Off" defaultRedirect="~/Error/error.aspx"/>
如果您正在寻找确切的标识符,那么您必须从global.ascx
文件重定向错误页面,以便您可以获得错误的确切标识符,因为每次错误或异常Application_Error
方法都将被执行。
protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = HttpContext.Current.Server.GetLastError();
var errorCode = ExceptionManager.Publish(ex);
Session["ERROR_IDENTIFIER"] = errorCode;
Response.Redirect("~/Error/error.aspx");//Added
}
答案 1 :(得分:1)
请参阅此SO问题:ASP.NET custom error page - Server.GetLastError() is null
您正在重定向到错误页面并丢失Application_Error处理程序中的错误信息。
TL; DR:
将您的网络配置更改为以下内容:
<customErrors defaultRedirect="~/Error/error.aspx" mode="RemoteOnly">
<error statusCode="404" redirect="~/Error/error.aspx?status=404" redirectMode="ResponseRewrite" />
</customErrors>