相关疑难解决方法(0)

在调用.Raise()后获取Elmah中的错误ID

我正在研究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)

asp.net-mvc elmah

8
推荐指数
1
解决办法
3682
查看次数

标签 统计

asp.net-mvc ×1

elmah ×1