asp.net-mvc – ELMAH – 使用自定义错误页面收集用户反馈
发布时间:2020-12-15 22:30:12 所属栏目:asp.Net 来源:网络整理
导读:我正在寻找第一次使用ELMAH,但有一个需要满足的要求,我不知道如何实现…… 基本上,我将配置ELMAH在asp.net MVC下工作,并让它在发生错误时将错误记录到数据库中.除此之外,我将使用customErrors在发生错误时将用户定向到友好的消息页面.相当标准的东西…… 要
我正在寻找第一次使用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可能同时有多个请求有错误.但发生这种情况的可能性很小.而且这个解决方案独立于会话,在我们的情况下很重要,一些错误也会导致会话被终止等等.因此,为什么这种方法对我们很有效. 解决方法
ELMAH中的
ErrorLogModule (撰写本文时为1.1版)提供了一个
Logged 事件,您可以在Global.asax中处理该事件,您可以使用该事件将详细信息(例如通过
HttpContext.Items 集合)传递到您的自定义错误页面.如果您在web.config中以ErrorLog的名称注册了ErrorLogModule,那么Global.asax中的事件处理程序将如下所示:
void ErrorLog_Logged(object sender,ErrorLoggedEventArgs args) { var id = args.Entry.Id // ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何检测移动浏览器,并将适当的内容指向它?
- ASP.Net MVC 3应用程序在应用程序池回收时随机失败
- asp.net – PolicyException:无法获取所需的权限 – 此错误
- 禁用默认按钮或输入密码在asp.net c#
- asp.net-mvc – Url.Action是编码参数值
- asp.net core 核心对象解析
- asp.net-mvc – 存储库模式:每个实体一个存储库类?
- asp.net-mvc – F#Asp.Net CodeDom ProviderOptions问题
- asp.net – 如何在不使用global.asax的情况下添加Applicati
- asp.net – 我可以在Visual Studio 2008中使用MVC3吗?
推荐文章
站长推荐
- asp.net – 如何显示UTC时间作为本地时间在网页?
- ASP.NET Core使用TopShelf部署Windows服务
- ASP.Net会话状态SQL Server用户权限
- 在IIS服务器上运行哪个进程会为每个asp.net应用程
- asp.net-mvc – 在MVC Razor中,如何在子布局下面
- asp.net – WCF:是否有一个属性要在OperationCo
- asp.net-mvc-2 – ASP.NET MVC2 Ninject NLog(sh
- asp.net-mvc – 如何缓存FileContentResult的性能
- asp.net – 使用“使用本地IIS Web服务器”时出现
- asp.net – bing地图花钱?
热点阅读