首先必須要了解整個 Action 在觸發時,會執行哪一些 Filter:
依上圖來看,事件的紀錄,不管是否產生錯誤,都可以在 OnActionExecuted 紀錄。
接下來說明一下在 ASP.NET MVC 4 WebApi 中 設置過程。
1.
新增一個類別檔在 Filters 底下,暫名為 WebApiActionFilterAttribute.cs,內容程式碼為:namespace EnterprisePortal.Filters { using System; using System.Net; using System.Net.Http; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http.Controllers; using System.Web.Http.Filters; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.StorageClient; using EnterprisePortal.Models; public class WebApiActionFilterAttribute : ActionFilterAttribute { private const string LogTableName = "Logs"; public override void OnActionExecuting(HttpActionContext actionContext) { } public override void OnActionExecuted(HttpActionExecutedContext context) { ... 紀錄 Log,狀態都在 context 可以找到 } } }
2.
最後直接在你的 BaseApiController 中類別上加上 [WebApiActionFilter],或者直接在 Global.asax 註冊,程式碼如下:using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using EnterprisePortal.Models; using EnterprisePortal.Filters; namespace EnterprisePortal.Controllers { [WebApiActionFilter] public class BaseApiController : ApiController { protected DefaultConnection db = new DefaultConnection(); } }
3.
測試吧! 隨便在一個 Action 丟出引數為無效的錯誤:public IEnumerableGet() { throw new ArgumentException(); return new string[] { "value1", "value2" }; }
沒有留言 :
張貼留言