С# Web.API Не удается добавить пользовательскую привязку модели

У меня есть контроллер API с одним методом Put

public class ScheduleExecutionsController : ApiController
{

    public ScheduleExecutionsResponse Put([ModelBinder(typeof(TestBinder))]ScheduleExecutionsRequest requestInfo)
    {
        ....
    }
}

Я добавил класс связующего в проект

public class TestBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        return new ScheduleExecutionsRequest();
    }
}

Я поставил 2 точки останова. Первый в первой строке метода Put в контроллере, а второй в первой строке моего объекта TestBinder BindModel. После того, как с Fiddler я отправляю запрос PUT.

Отладчик всегда останавливается внутри моего действия, но никогда не внутри метода BindModel связывателя. Кажется, что используется связующее по умолчанию. Что я пропустил, чтобы добавить пользовательский?


person Vitalii    schedule 06.04.2016    source источник
comment
Разве BindModel не должен возвращать логическое значение вместо объекта?   -  person vc 74    schedule 06.04.2016
comment
нет, это должен быть объект msdn.microsoft. com/fr-fr/library/dd505073(v=vs.118).aspx   -  person Vitalii    schedule 06.04.2016
comment
эта ссылка предназначена для документации Mvc, документ webapi находится здесь   -  person vc 74    schedule 06.04.2016


Ответы (1)


Используете ли вы WebAPI или MVC версия ModelBinderAttribute?

Большая часть инфраструктуры MVC и WebAPI — фильтры, привязки и т. д. — существует в двух формах (из-за истории двух библиотек). Ваши контроллеры и действия WebAPI должны использовать их версию WebAPI (пространство имен System.Web.Http или его дочерние пространства имен)).

person Richard    schedule 06.04.2016
comment
Большое спасибо. Это была проблема неправильного пространства имен для IModelBinder в версии Binder, а также с атрибутом связывания модели, который должен выглядеть следующим образом [System.Web.Http.ModelBinding.ModelBinder(typeof(TestBinder))] - person Vitalii; 06.04.2016