Tôi đã đi qua một hành vi kỳ lạ nhưng tôi không chắc chắn nếu tôi đang đi đúng hướng ở đây.Bộ lọc của GlobalFilterCollection chạy trước khi Bộ lọc của ControllerInstanceFilterProvider
Tôi có bộ điều khiển ghi đè OnException
phương thức của lớp cơ sở Controller
.
public class ControllerFiltersController : Controller {
public ActionResult Index() {
throw new NotImplementedException();
}
protected override void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"ControllerFiltersController Exception: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
Tôi cũng có một tùy chỉnh ExceptionFilter như sau:
public class HandleErrorCustom : IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
Trace.TraceInformation(
"HandleErrorCustom Exception Message: " + DateTime.Now.ToString("hh:mm:ss.fff")
);
}
}
Sau đó, tôi đã đăng ký nó như một bộ lọc toàn cầu:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new HandleErrorCustom());
}
gì tôi mong đợi là đây để dụ điều khiển lọc để chạy trước bộ lọc chung vì thứ tự bộ lọc được cung cấp bởi ControllerInstanceFilterProvider
là Int32.MinValue
và t phạm vi của họ là FilterScope.First
.
Như cũng giải thích ở đây: ASP.NET MVC 3 Service Location, Part 4: Filters
Nhưng kết quả là khác nhau:
Thông tin iisexpress.exe: 0: HandleErrorCustom Exception nhắn: 06: 56: 49,972
iisexpress.exe Thông tin: 0: ControllerFiltersController Exception: 06: 56: 49.974
Đây là một ứng dụng ASP.NET MVC 4 và tôi không biết bất kỳ thay đổi nào ảnh hưởng đến hành vi sắp xếp bộ lọc của ASP.NET MVC 3. Tôi thiếu gì ở đây?
Bây giờ, tôi hiểu rồi. Vì vậy, các bộ lọc, có giá trị thấp hơn và chạy trên mặt trả về của các hành động, sẽ chạy đầu tiên. Cảm ơn! – tugberk