perhatikan bahwa jawaban ini berlaku hingga MVC 5 / Web API 2
Jawaban singkat: Filter MVC dan Web API tidak kompatibel silang, dan jika Anda ingin mendaftarkannya secara global, Anda harus menggunakan kelas konfigurasi yang sesuai untuk masing-masing.
Jawaban panjang: ASP.NET MVC dan Web API sengaja dirancang untuk bekerja dengan cara yang sama, tetapi pada kenyataannya keduanya adalah makhluk yang berbeda.
API Web berada di bawah System.Web.Http
namespace, sedangkan MVC berada di bawah System.Web.Mvc
namespace. Keduanya akan hidup berdampingan dengan senang hati, tetapi yang satu tidak berisi yang lain dan terlepas dari kesamaan dalam model pemrograman, implementasi yang mendasarinya berbeda. Sama seperti pengontrol MVC dan pengontrol API Web mewarisi kelas pengontrol dasar yang berbeda (MVC diberi nama sederhana Controller
dan Web API diberi nama ApiController
) filter MVC dan filter API Web mewarisi dari FilterAttribute
kelas yang berbeda (keduanya berbagi nama yang sama dalam kasus ini, tetapi merupakan kelas terpisah yang hidup di ruang nama masing-masing).
Filter global API Web didaftarkan melalui HttpConfiguration
objek yang tersedia untuk Anda dalam Register
metode WebApiConfig.cs jika Anda menggunakan template proyek dengan WebActivator:
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
atau sebaliknya di global.asax.cs:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Filter global MVC didaftarkan melalui GlobalFilterCollection
objek, yang tersedia untuk Anda melalui RegisterGlobalFilters
metode FilterConfig.cs untuk proyek yang menggunakan WebActivator:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
atau dalam file global.asax.cs sebagai cara GlobalFilters.Filters
pengumpulan untuk mereka yang tidak memiliki WebActivator:
GlobalFilters.Filters.Add(new MyMvcFilter());
Perlu dicatat bahwa dalam kedua kasus Anda tidak perlu mewarisi dari FilterAttribute
jenis yang sesuai . Filter API Web hanya perlu mengimplementasikan antarmuka System.Web.Http.IFilter, sementara pendaftaran filter MVC memeriksa untuk memastikan bahwa kelas Anda mewarisi salah satu dari segelintir antarmuka filter yang ditentukan dalam System.Web.Mvc
namespace.