如何为MVC3站点编写LogExceptionAttribute?

时间:2012-11-06 04:23:11

标签: asp.net-mvc-3 logging exception-handling attributes

在每一个动作中,我写道:

public ActionResult Foo()
{
    try
    {
        // Do something
    }
    catch(Exception ex)
    {
        Logger.Error("Foo()", ex);
    }
    ...
}

我知道MVC3能够在Global.asax中使用“RegisterGlobalFilters”,所以我想编写一个自定义的LogExceptionAttribute。将:

  1. 记录哪个动作导致异常的信息。调用我的Logger API:

    Logger.Error(字符串actionName,Exception ex)

  2. 再次抛出异常。这样web.config中的CustomError就会显示用户错误页面。

  3. 如何实现这个?

1 个答案:

答案 0 :(得分:1)

试试这个

  public class HandleErrorHmAttribute : HandleErrorAttribute
        {
            public override void OnException(ExceptionContext context)
            {
                base.OnException(context);
                new WebRequestErrorEventMvc("An unhandled exception has occurred.", this, 103005, context.Exception).Raise();
            }
        }

        public class WebRequestErrorEventMvc : WebRequestErrorEvent
        {
            public WebRequestErrorEventMvc(string message, object eventSource, int eventCode, Exception exception) : base(message, eventSource, eventCode, exception) { }
            public WebRequestErrorEventMvc(string message, object eventSource, int eventCode, int eventDetailCode, Exception exception) : base(message, eventSource, eventCode, eventDetailCode, exception) { }
       }