我正在研究MVC3应用程序,我正在使用Elmah来处理我的错误记录.我在我的应用程序中想要的是将Elmah Id带到自定义错误页面,因为我将提供一个链接,允许用户在重复错误(他们认为)的情况下专门报告它.
现在,我在这里阅读了类似的问题,他们建议在Global.asax.cs文件中添加以下代码(或类似代码):
void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)
{
string sessionId = Session.SessionID;
Session["ElmahId_" + sessionId] = args.Entry.Id;
}
Run Code Online (Sandbox Code Playgroud)
这就是我目前正在使用的,SessionID允许增加使Session会话存储对象唯一的灵活性.但是,如果在(几乎)同时发生多个错误,这仍可能导致问题.
相反,我决定使用我自己的HandleErrorAttribute,它看起来像这样:
public class ElmahHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext == null)
throw new ArgumentNullException("filterContext");
if (filterContext.IsChildAction && (!filterContext.ExceptionHandled
&& filterContext.HttpContext.IsCustomErrorEnabled))
{
Elmah.ErrorSignal.FromCurrentContext().Raise(filterContext.Exception);
// get error id here
string errorId = null;
string areaName = (String)filterContext.RouteData.Values["area"];
string controllerName = (String)filterContext.RouteData.Values["controller"];
string actionName = (String)filterContext.RouteData.Values["action"];
var model = new ErrorDetail
{
Area = areaName,
Controller = …Run Code Online (Sandbox Code Playgroud)