Подтвердить что ты не робот

Что эквивалентно MVC DefaultModelBinder в ASP.net Web API?

Я хочу создать настраиваемое связующее устройство в ASP.Net Web API. Есть много ресурсов на том, как это сделать с нуля, но я хочу использовать существующую функциональность.

Я посмотрел в источнике на codeplex и вижу, что в нем много машинных модулей, но большинство из них запечатаны... и даже тогда я не могу понять, какой из них будет использоваться в ситуациях.

Вот мой заголовок метода api:

public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field)

Что я хочу сделать, это в основном перехват modelbinder после того, как он заполнил все основные свойства, а затем установил некоторые дополнительные значения на основе заголовков HTTP-запросов, которые я буду устанавливать на стороне клиента.

Как я уже сказал, мне комфортно создавать пользовательские модели-подборщики и modelbinderproviders и подключать их, в бит, с которым я столкнулся, пытается повторно использовать существующие функции.

Спасибо, Пит

4b9b3361

Ответ 1

Взгляните сюда на точки расширения для WebApi.

В WebApi нет точного эквивалента для MVC DefaultModelBinder.

Если вы используете атрибут [FromBody], тогда будет вызываться FormatterParameterBinding, и MediaTypeFormatter будет использоваться для создания вашей модели.

Взаимодействующие модели для пути URI и Url (Query Params) будут вызывать ModelBinderParameterBinding, которые будут переданы либо в IValueProvider, либо IModelBinder...

Итак...

В вашем примере Field (в зависимости от результата согласования типа содержимого) будет использоваться одно из следующих значений: XmlMediaTypeFormatter, JsonMediaTypeFormatter или FormUrlEncodedMediaTypeFormatter. Поэтому вам следует настроить поведение сериализации, используя их соответствующие настройки, например. JSON.NET... или реализовать собственный или завернутый MediaTypeFormatter.

В вашем примере appId, вероятно, будет передан в IValueProvider... например ElementalValueProvider.