gpt4 book ai didi

asp.net - 将最后一个错误传递给自定义错误重定向的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 17:28:57 26 4
gpt4 key购买 nike

想知道您对此解决方案的看法,这是否是将错误消息传递到自定义页面的正确方法?

在 web.config 中:

    <customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>

在 Global.asax 中:
<script RunAt="server">
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
if (ex != null && Session != null)
{
ex.Data.Add("ErrorTime", DateTime.Now);
ex.Data.Add("ErrorSession", Session.SessionID);
HttpContext.Current.Cache["LastError"] = ex;
}
}

</script>

在我的 Error.aspx.cs 中:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;

if (HttpContext.Current.Cache["LastError"] != null)
{
Exception ex = (Exception)HttpContext.Current.Cache["LastError"];
if (ex.Data["ErrorTime"] != null && ex.Data["ErrorSession"] != null)
if ((DateTime)ex.Data["ErrorTime"] > DateTime.Now.AddSeconds(-30d) && ex.Data["ErrorSession"].ToString() == Session.SessionID)
Label1.Text = ex.InnerException.Message;
}
}

问题:我不想从 Global.asax 做 Server.Transfer 因为..我不知道。对我来说似乎很笨拙。希望能够将 customErrors 更改为 RemoteOnly。所以必须在某处保存最后一个异常,但不能是 Session,所以保存到 Cache 但有一些额外的数据(时间和 SessionID),因为 Cache 是全局的,并希望确保不会向某人显示错误的错误。

我稍微改变了我的代码。现在只是:
void Application_Error(object sender, EventArgs e)
{
HttpContext.Current.Cache["LastError"] = Server.GetLastError().GetBaseException();
Server.ClearError();
}

...和...
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;

if (HttpContext.Current.Cache["LastError"] != null)
{
Exception ex = (Exception)HttpContext.Current.Cache["LastError"];
if (ex != null)
Label1.Text = ex.Message;
}
}

注意 SessionID 不存在如果匿名用户,并且 ex.Data.Add 一个已经存在的键会导致错误,让我意识到调用 ClearError 很重要

最佳答案

我认为这是一个体面的方式来做到这一点。这不是我做的方式,但我的代码太长而无法发布(并且在 VB.NET 中)。

我要改变的一件事是错误页面本身。与其显示错误,不如考虑向错误页面添加一个文本框作为可选字段,用户可以在其中输入他们的电子邮件地址,然后单击一个按钮将错误报告发送给您。然后当您收到错误报告时,您可以查看问题并回复他们。这是一种更加用户友好的方式来做到这一点,并且对于我已经完成的网站来说效果很好。

沿着这些思路,您可能还想收集表单数据、 session 数据和任何其他有值(value)的东西,并将其放入错误报告中。这可以使诊断问题变得更加容易。

关于asp.net - 将最后一个错误传递给自定义错误重定向的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1127236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com