lưu ý rằng câu trả lời này đúng với MVC 5 / Web API 2
Câu trả lời ngắn gọn: Các bộ lọc MVC và Web API không tương thích chéo và nếu bạn muốn đăng ký chúng trên toàn cầu, bạn phải sử dụng các lớp cấu hình thích hợp cho từng loại.
Câu trả lời dài: ASP.NET MVC và Web API được thiết kế có chủ đích để hoạt động theo cách giống nhau, nhưng trên thực tế chúng là những sinh vật khác nhau.
API web nằm dưới System.Web.Http
không gian tên, trong khi MVC nằm dưới System.Web.Mvc
không gian tên. Hai người sẽ sống hạnh phúc bên cạnh nhau, nhưng cái này không chứa cái kia và mặc dù có những điểm tương đồng trong mô hình lập trình, nhưng cách triển khai cơ bản là khác nhau. Cũng giống như bộ điều khiển MVC và bộ điều khiển API Web kế thừa các lớp bộ điều khiển cơ sở khác nhau (MVC được đặt tên đơn giản Controller
và đặt tên của API Web ApiController
) bộ lọc MVC và bộ lọc Web API kế thừa từ các FilterAttribute
lớp khác nhau (cả hai đều có chung tên trong trường hợp này, nhưng là các lớp riêng biệt tồn tại trong không gian tên tương ứng của chúng).
Các bộ lọc chung của API Web được đăng ký thông qua HttpConfiguration
đối tượng có sẵn cho bạn trong Register
phương thức WebApiConfig.cs nếu bạn đang sử dụng mẫu dự án với WebActivator:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
hoặc trong global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Bộ lọc toàn cầu Mvc được đăng ký theo cách của một GlobalFilterCollection
đối tượng, có sẵn cho bạn thông qua RegisterGlobalFilters
phương thức FilterConfig.cs cho các dự án đang sử dụng WebActivator:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
hoặc trong tệp global.asax.cs theo cách GlobalFilters.Filters
thu thập cho những người không có WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
Cần lưu ý rằng trong cả hai trường hợp, bạn không cần phải kế thừa từ FilterAttribute
loại thích hợp . Bộ lọc Web API chỉ cần triển khai giao diện System.Web.Http.IFilter, trong khi đăng ký bộ lọc MVC kiểm tra để đảm bảo rằng lớp của bạn kế thừa một trong số ít các giao diện bộ lọc được xác định trong System.Web.Mvc
không gian tên.