gpt4 book ai didi

asp.net-mvc - ELMAH - 使用自定义错误页面收集用户反馈

转载 作者:行者123 更新时间:2023-12-04 07:29:58 25 4
gpt4 key购买 nike

我正在考虑第一次使用 ELMAH 但有一个需要满足的要求,我不确定如何实现......

基本上,我要将 ELMAH 配置为在 asp.net MVC 下工作,并在错误发生时将其记录到数据库中。最重要的是,当发生错误时,我使用 customErrors 将用户定向到友好的消息页面。相当标准的东西...

要求是在这个自定义错误页面上,我有一个表单,用户可以根据需要提供额外的信息。现在问题出现了,因为此时错误已经被记录,我需要将记录的错误与用户反馈相关联。

通常,如果我使用自己的自定义实现,在我记录错误后,我会将错误的 ID 传递到自定义错误页面,以便可以进行关联。但由于 ELMAH 的工作方式,我认为不太可能。

因此,我想知道人们如何认为人们可能会这样做......

干杯

更新:

我对这个问题的解决方法如下:

public class UserCurrentConextUsingWebContext : IUserCurrentConext
{
private const string _StoredExceptionName = "System.StoredException.";
private const string _StoredExceptionIdName = "System.StoredExceptionId.";

public virtual string UniqueAddress
{
get { return HttpContext.Current.Request.UserHostAddress; }
}

public Exception StoredException
{
get { return HttpContext.Current.Application[_StoredExceptionName + this.UniqueAddress] as Exception; }
set { HttpContext.Current.Application[_StoredExceptionName + this.UniqueAddress] = value; }
}

public string StoredExceptionId
{
get { return HttpContext.Current.Application[_StoredExceptionIdName + this.UniqueAddress] as string; }
set { HttpContext.Current.Application[_StoredExceptionIdName + this.UniqueAddress] = value; }
}
}

然后当错误发生时,我的 Global.asax 中有这样的东西:
public void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)
{
var item = new UserCurrentConextUsingWebContext();
item.StoredException = args.Entry.Error.Exception;
item.StoredExceptionId = args.Entry.Id;
}

然后无论您以后在哪里,您都可以通过以下方式提取详细信息
    var item = new UserCurrentConextUsingWebContext();
var error = item.StoredException;
var errorId = item.StoredExceptionId;
item.StoredException = null;
item.StoredExceptionId = null;

请注意,这并不是 100% 完美的,因为同一个 IP 可能同时有多个请求出错。但这种情况发生的可能性很小。而且这个解决方案独立于 session ,这在我们的例子中很重要,一些错误也可能导致 session 终止等。因此,为什么这种方法对我们来说效果很好。

最佳答案

ErrorLogModule 在 ELMAH(撰写本文时为 1.1 版)中提供了一个 Logged 您可以在 Global.asax 中处理的事件您可以使用它来传达详细信息,例如通过 HttpContext.Items 集合,到您的自定义错误页面。如果您注册了 ErrorLogModule名下ErrorLogweb.config然后你的事件处理程序在 Global.asax看起来像这样:

void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)  
{
var id = args.Entry.Id
// ...
}

关于asp.net-mvc - ELMAH - 使用自定义错误页面收集用户反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143146/

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