2017-01-26 8 views
0

Я создаю пользовательский 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:

debugger output

Далее я попытался использовать этот код:

[HttpGet] 
public async Task<IActionResult> Get(
    [ModelBinder(BinderType = typeof(MyModelBinder))] int userId 
) 
{ 
    // stuff 
} 

Этот атрибут, кажется, не имеют никакого эффекта. Он не заставляет использовать MyModelBinder; модельные связующие используются в порядке, указанном в Startup.cs (список в MvcOptions).

ответ

0

PropertyFilterProvider содержит экземпляр BindAttribute, который реализует интерфейс IPropertyFilterProvider. Вы можете бросить экземпляр в BindAttribute и получить доступ к Include собственности:

var bindAttribute = context.BindingInfo.PropertyFilterProvider as BindAttribute; 
var include = bindAttribute?.Include; 

Имейте в виду, что приведение не может быть успешным, в результате чего bindingAttribute быть null.