Фильтры в ASP.NET меня смущают. Я видел 3 вида фильтров:
Фильтр MVC System.Web.Mvc.IActionFilter
Фильтр WebAPI System.Web.Http.Filters.IActionFilter
Core MVC filter Microsoft.AspNetCore.Mvc.Filters.IActionFilter
Есть ли фильтр Core WebAPI?
У меня есть фильтр WebAPI, который использует Dependency Injection через параметры конструктора. Это хорошо работает в моем приложении WebAPI, которое использует Unity в качестве контейнера IOC.
container.Register<IMyService, MyService>();
container.Register<LogActionFilter>();
var filterInstance = container.Resolve<LogActionFilter>();
GlobalConfiguration.Configuration.Filters.Add(filterInstance);
Следующий атрибут Log
определяется как простой атрибут, который имеет только три свойства. LogActionFilter
выше проверит, имеет ли действие атрибут Log
, используя GetCustomeAttribute<LogAttribute>()
.
[Log(Enabled=true, Level=2, Format="xxxx")]
public void MyAction()
{
}
Теперь я хочу перенести его в ASP.NET CORE. Могу ли я использовать DI для фильтров CORE?
Я нахожу Microsoft.AspNetCore.Mvc.Filters.IActionFilter
только в ASPNET CORE. И, кажется, трудно использовать DI. До сих пор не знаю, как зарегистрировать такой фильтр.
Я знаю, что есть ServiceFilter(typeof(XxxFilter))
, но не очень хорошо передавать такие параметры, как [Log(Enabled=true, Level=2, Format="xxxx")]
У кого-нибудь есть пример фильтра CORE?
Спасибо.