using System.Web.Http.Filters;
public class ElmahErrorAttribute : ExceptionFilterAttribute
public override void OnException(HttpActionExecutedContext actionExecutedContext)
if (actionExecutedContext.Exception != null)
Elmah.ErrorSignal.FromCurrentContext().Raise(actionExecutedContext.Exception);
base.OnException(actionExecutedContext);
重點就在於以下這行,將 例外過濾器 取得的例外,寫入到 Elmah 裡:
請注意: Elmah.ErrorSignal.FromCurrentContext().Raise(…) 是 ELMAH 1.2 之後才提供的 API (文件庫)
Elmah.ErrorSignal.FromCurrentContext().Raise(actionExecutedContext.Exception);
接著我們開啟 App_Start\WebApiConfig.cs 類別,在 WebApiConfig 類別的 Register 方法開頭的地方,將 ElmahErrorAttribute 註冊到 全域動作過濾器 (Global Action Filter) 裡,範例如下:
public static class WebApiConfig
public static void Register(HttpConfiguration config)
config.Filters.Add(
new ElmahErrorAttribute()
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
如此一來,日後若 ASP.NET Web API 再遇到錯誤,就可以從 ELMAH 查出完整的錯誤訊息與堆疊追蹤資訊了!
有時候遇到比較小的案子,為了方便起見,我會把 ElmahErrorAttribute 類別直接跟 WebApiConfig 放在同一個 C# 檔案裡,以方便管理:
using System.Web.Http;
using System.Web.Http.Filters;
namespace MvcApplication1
public class ElmahErrorAttribute : ExceptionFilterAttribute
public override void OnException(HttpActionExecutedContext actionExecutedContext)
if (actionExecutedContext.Exception != null)
Elmah.ErrorSignal.FromCurrentContext().Raise(actionExecutedContext.Exception);
base.OnException(actionExecutedContext);
public static class WebApiConfig
public static void Register(HttpConfiguration config)
config.Filters.Add(
new ElmahErrorAttribute()
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
ASP.NET Web API and ELMAH Integration
Exception Handling in ASP.NET Web API
ASP.NET Web API
elmah - Error Logging Modules and Handlers for ASP.NET
如何偵錯--ELMAH 絕妙的偵錯工具安全架設於ASP.NET MVC
Introductory article for ELMAH by Simone Busoli
NuGet Gallery | ELMAH 1.2.2
Huan-Lin 學習筆記: ASP.NET Web API Exception Filter
如何在 ASP.NET Web API 套用 ELMAH 錯誤紀錄模組 (2021 年版)
之前寫過好幾篇跟 ELMAH 相關的文章,其中 如何在 ASP.NET MVC 4 套用 ELMAH 錯誤紀錄模組 這篇還沒有過時,但剛在看 如何在 ASP.NET Web API 套用 ELMAH
如何在 ASP.NET Web API 套用 ELMAH 錯誤紀錄模組
每個網站必備的 ELMAH (Error Logging Modules and Handlers) 模組,在使用 ASP.NET Web API 時卻無法自動套用,也就是說 ASP.NET Web ...
如何在 ASP․NET Core 3 完整設定 NSwag 與 OpenAPI v3 文件
要設定好一份相對完整的 OpenAPI v3 文件,需要具備相當的知識才能深入理解,本篇文章我將介紹如何在 ASP․NET Core 3 環境下設定 NSwag 套件,並且介紹各種設定的詳細說明。
Microsoft Certified: Azure Solutions Architect Expert
Microsoft Certified: DevOps Engineer Expert
CKAD: Certified Kubernetes Application Developer