Tôi mới làm quen với toàn bộ điều MVC và đang xem xét việc triển khai lại một số dịch vụ WCF bằng ASP.NET Web API. Là một phần của điều đó, tôi muốn thực hiện một bộ lọc hành động ghi lại tất cả các hành động và ngoại lệ cũng như thời gian nên tôi nghĩ tôi sẽ bắt đầu với Bộ lọc hành động, tuy nhiên bộ lọc không được gọi.Ví dụ về ASP.NET Web API ActionFilter
public class MyTrackingActionFilter : ActionFilterAttribute, IExceptionFilter
{
private Stopwatch stopwatch = new Stopwatch();
public void OnException(ExceptionContext filterContext)
{
...
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
...
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
this.stopwatch.Start();
Trace.TraceInformation(" Entering {0}", filterContext.RouteData);
}
}
và trên bộ điều khiển, tôi có
[MyTrackingActionFilter]
public class MyResourceController : ApiController
{
...
}
Các tuyến đường được thiết lập trong Global.asax sử dụng cuộc gọi như:
var routeTemplate = ...
var defaults = new { controller = controllerName, action = methodName };
var constraints = new { httpMethod = new HttpMethodConstraint(myHTTPMethods.Split(',')) };
routes.MapHttpRoute(methodName, routeTemplate, defaults, constraints);
Vấn đề là các các hành động trên MyResourceController được gọi như mong đợi và chạy thành công. Khách hàng có thể truy vấn máy chủ để biết thông tin cần thiết và tất cả đều hoạt động tốt, ngoại trừ việc không có phương thức lọc hành động nào được gọi.
Sự hiểu biết của tôi là phần còn lại xảy ra "tự động". Điều đó rõ ràng là không đủ - Bất kỳ sugestions như những gì là sai? Tôi có cần đăng ký ở đâu đó không?
LƯU Ý: Tôi đã thử thêm thuộc tính cho cả thao tác cũng như lớp và cách thức không hoạt động. – WildeButNotOscar
Đảm bảo 100% các lớp liên quan đến Bộ điều khiển API của bạn sử dụng ActionFilter từ System.Web.HttpFilters và KHÔNG phải là một từ System.Web.Mvc –
Ở trên cùng, bạn sẽ thấy một cái gì đó như: using System.Web.HttpFilters; –