我在 asp.net 中有 Web 应用程序。我必须实现自定义错误页面。表示是否发生任何错误(运行时)。我必须在 errorpage.aspx 上显示异常和堆栈跟踪,我应该从母版页还是在页面级别以及如何处理。
<customErrors mode="On" defaultRedirect="~/Error_Page.aspx"></customErrors>
我在 asp.net 中有 Web 应用程序。我必须实现自定义错误页面。表示是否发生任何错误(运行时)。我必须在 errorpage.aspx 上显示异常和堆栈跟踪,我应该从母版页还是在页面级别以及如何处理。
<customErrors mode="On" defaultRedirect="~/Error_Page.aspx"></customErrors>
您可以在 global.asax 中处理它:
protected void Application_Error(object sender, EventArgs e)
{
Exception ex = System.Web.HttpContext.Current.Error;
//Use here
System.Web.HttpContext.Current.ClearError();
//Write custom error page in response
System.Web.HttpContext.Current.Response.Write(customErrorPageContent);
System.Web.HttpContext.Current.Response.StatusCode = 500;
}
请不要使用重定向来显示错误消息,因为它会破坏 HTTP。如果发生错误,服务器返回适当的 4xx 或 5xx 响应而不是 301 重定向到 200 OK 响应是有意义的。我不知道微软为什么将这个选项添加到 ASP.NET 的自定义错误页面功能中,但幸运的是你不需要使用它。
我建议使用 IIS 管理器为您生成 web.config 文件。至于处理错误,打开你的Global.asax.cs
文件并添加一个方法Application_Error
,然后Server.GetLastError()
从内部调用。
使用Elmah dll 以漂亮的 UI 显示您的错误。您可以使用此 DLL 维护日志。
在 Global.asax
void Application_Error(object sender, EventArgs e)
{
Session["error"] = Server.GetLastError().InnerException;
}
void Session_Start(object sender, EventArgs e)
{
Session["error"] = null;
}
在 Error_Page Page_Load 事件中
if (Session["error"] != null)
{
// You have the error, do what you want
}
您可以使用 Server.GetLastError 访问错误;
var exception = Server.GetLastError();
if (exception != null)
{
//Display Information here
}