asp.net mvc错误处理助手类

时间:2010-07-20 21:59:32

标签: asp.net-mvc

我想为我的asp.net mvc项目编写Error Handler Helper类。

任何人都可以在我的申请中给我代码如何编写以及在哪里编写这个助手类?

我需要使用此错误登录控制器级别.. 我不想在我的控件中为每个Actionresult使用try和catch块。 我需要使用控制器级别吗?

cananybody能帮助我吗?

感谢

2 个答案:

答案 0 :(得分:2)

我可以建议你使用elmah。它非常适合错误记录,您可以从这里阅读:http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

我做了什么,我很满意,如下。我已经完成了自定义句柄错误属性,其中包含以下代码:

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{

    public override void OnException(ExceptionContext context)
    {
        base.OnException(context);

        var e = context.Exception;
        if (!context.ExceptionHandled   // if unhandled, will be logged anyhow
            || ExceptionHelper.RaiseErrorSignal(e)      // prefer signaling, if possible
            || IsFiltered(context))     // filtered?
            return;

        ExceptionHelper.LogException(e);
    }


    private static bool IsFiltered(ExceptionContext context) 
    {
        var config = context.HttpContext.GetSection("elmah/errorFilter") 
                     as ErrorFilterConfiguration;

        if (config == null) 
            return false;

        var testContext = new ErrorFilterModule.AssertionHelperContext(
                                  context.Exception, HttpContext.Current);

        return config.Assertion.Test(testContext);
    }
}

我有一个带有此代码的ExceptionHelper类:

public static class ExceptionHelper
{
    public static bool RaiseErrorSignal(Exception e)
    {
        var context = HttpContext.Current;
        if (context == null)
            return false;
        var signal = ErrorSignal.FromContext(context);
        if (signal == null)
            return false;
        signal.Raise(e, context);
        return true;
    }

    public static void LogException(Exception e)
    {
        var context = HttpContext.Current;
        ErrorLog.GetDefault(context).Log(new Error(e, context));
    }

然后我用MyNamspace.HandleError注释了我的基本控制器类,现在处理并记录了所有异常,当出现问题时我甚至会收到邮件....

答案 1 :(得分:1)

为您编写错误日志记录? hmmmm。幸运的是,某人已经拥有:您需要log4net