2013-04-26 76 views
3

我目前在vs2012上使用mvc4,並且我安裝了mvc.elmah塊並完成了。關於在ASP.NET MVC中使用ELAMH的說明

我做了什麼?

最初我沒有寫任何代碼,我的例外記錄在ELMAH中。

後,我決定使用MVC的HandleError來處理應用程序異常,並添加過濾器

filters.Add(new HandleErrorAttribute()); 

現在我調試的過濾器,看看我有2個過濾器之一ELMAH HandleErrorAttribute and MVC HandleErrorAttribute !

我看到這個出色的鏈路https://stackoverflow.com/a/5936867/1481690這談論使用ErrorSignal來處理應用程序異常

但我沒有使用ErrorSignal但仍然我的例外被ELMAH捕獲?

如果我使用

if (context.ExceptionHandled) 
      ErrorSignal.FromCurrentContext().Raise(context.Exception); 

我的異常登錄兩次。

我的問題如下

  • 我是否需要使用2個過濾器(ELMAH和MVC)?
  • 如果ELMAH已經有HandleErrorAttribute和日誌異常。我是否需要添加MVC HandleErrorAttribute?

什麼現在做的是目前

添加了過濾器

filters.Add(new HandleErrorAttribute()); 

和壓倒一切的(爲了處理未來的Ajax錯誤)

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute 
    { 
     public override void OnException(ExceptionContext context) 
     { 
base.OnException(context); 
} 

難道這還不夠或者什麼好練習?因爲它記錄了兩次,所以不會引發ErrorSignal。

我沒有使用任何try.catch作爲使用下面的行,並希望我的例外處理。

base.OnException(context); 

}

只是想確保我在正確的方式!

感謝您的時間

回答

2

我相信你擁有它的方式是正確的。這是我的Global.asax.cs

private static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new ElmahHandleErrorAttribute()); 
     filters.Add(new HandleErrorAttribute()); 
    } 

一來檢查的事情是,你的控制器沒有任何[ElmahHandleError][HandleError]屬性。

5

UPDATE:我指出了錯誤的包更新問題。

你不需要兩者。 ElmahHandleErrorAttribute繼承自HandleErrorAttribute,所以使用兩者都是多餘的。

How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

你也不必提出任何信號,ELMAH,該ElmahHandleErrorAttribute處理此。

如果您使用的是來自Nuget的Elmah.Contrib.MVC,您所需要的全部是ElmahHandleErrorAttribute

filters.Add(new Elmah.Contrib.MVC.ElmahHandleErrorAttribute()); 

還有上有一個包,我誤以爲這一個在Elmah.MVC由同一作者爲ELMAH完成,我期待這個一個找出差異,以及如何使用它。

UPDATE 2:好吧,顯然Elmah.MVC包內置了所有這些內容,並且它們使用WebActivator爲您註冊幾乎所有東西。因此,從字面上看,您需要在全新的MVC項目上開展跟蹤錯誤的工作,Elmah將安裝軟件包並進行編譯。完成。不過,您應該在安裝後檢查web.config,然後在AppSettings下設置查看頁面所需的角色並啓用身份驗證。