Я создаю пользовательский ModelBinder в .NET Core 1.1.0, и я думаю, что я его в основном выяснил. Я хочу использовать это связующее только тогда, когда я специально хочу, но я не могу понять, как это сделать. Я хочу, чтобы это связующее устройство было проигнорировано, когда я его не называю, но когда я его называю, я хочу, чтобы все других игнорировались. Как я могу это сделать?Вызов пользовательского ModelBinder в .NET Core
Две вещи, которые кажутся выполнимыми, являются атрибутами параметра [Bind]
и [ModelBinder]
, но ни один из них действительно не работает.
Я первый попробовал ниже:
[HttpGet]
public async Task<IActionResult> Get([Bind("test")] int userId)
{
// stuff
}
Когда мой заказ IModelBinderProvider
ударил, то ModelBinderProviderContext
содержит BindingInfo
свойство, которое, в свою очередь, содержит IPropertyFilterProvider
. При отладке этот поставщик фильтра содержит коллекцию с именем Include
с моим значением test
. Однако, похоже, нет никакого способа проверить это программно, но я никак не могу найти доступ к этой коллекции. Он имеет значение null, если ничего не задано, поэтому я мог гипотетически проверить значение null, но это очень грязно и не очень хорошая идея.
Чтобы проиллюстрировать это, вот информация отладчик для ModelBinderProviderContext
:
Далее я попытался использовать этот код:
[HttpGet]
public async Task<IActionResult> Get(
[ModelBinder(BinderType = typeof(MyModelBinder))] int userId
)
{
// stuff
}
Этот атрибут, кажется, не имеют никакого эффекта. Он не заставляет использовать MyModelBinder
; модельные связующие используются в порядке, указанном в Startup.cs
(список в MvcOptions
).