ASPNET MVC-фильтр, WebAPI-фильтр, ASPNET-ядро MVC-фильтр, это три разные вещи? - PullRequest
0 голосов
/ 13 апреля 2019

Фильтры в ASP.NET меня смущают. Я видел 3 вида фильтров:

Фильтр MVC System.Web.Mvc.IAction​Filter

Фильтр 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?

Спасибо.

1 Ответ

1 голос
/ 13 апреля 2019

TL; DR: Все они в значительной степени одно и то же.

Итак, общая тема заключается в том, что все они являются фильтрами действий MVC. Это означает, что они работают вокруг выполнения действия в контексте инфраструктуры MVC.

Разница только в том, что они используются для различных MVC-фреймворков.

ASP.NET MVC - это старая платформа MVC, работающая на .NET Framework. WebAPI - это фреймворк, разработанный специально для создания API-интерфейсов для Интернета. Обычно он похож на ASP.NET MVC, но все еще является отдельной сущностью.

В ASP.NET Core, новой и текущей среде MVC с открытым исходным кодом от Microsoft, различие между «MVC» и «WebAPI» было удалено, и вместо этого у вас есть только одна инфраструктура MVC, включенная в ASP.NET Core. Таким образом, у вас просто есть ASP.NET Core, и там вы используете фильтры действий для действий MVC.

Существует очень хорошая документация по фильтрам MVC для ASP.NET Core. Также есть раздел о внедрении зависимостей в фильтрах . Вы можете использовать ServiceFilter или TypeFilter, чтобы правильно использовать внедрение зависимостей в ваших фильтрах. ServiceFilter используется, когда вы хотите полностью разрешить фильтр из контейнера DI, тогда как вы можете использовать TypeFilter, чтобы также предоставить некоторые параметры непосредственно в атрибуте. Пример для TypeFilter по иронии судьбы также использует пример ведения журнала.

При этом ведение журнала, как правило, не лучший вариант использования для фильтров действий, поскольку ASP.NET Core фактически регистрирует выполнение действий по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...