tutorial net fromquery frombody example asp c# rest asp.net-web-api model-binding

c# - net - web api frombody parameters



¿Cuál es el equivalente de DefaultModelBinder de MVC en la API web de ASP.net? (1)

Quiero crear un archivador de modelo personalizado en ASP.Net Web API. Hay muchos recursos sobre cómo hacer esto desde cero, pero quiero aprovechar la funcionalidad existente.

He mirado a mi alrededor en el código fuente de Codeplex y puedo ver un montón de encuadernadores de modelos allí pero la mayoría están sellados ... e incluso entonces no puedo averiguar cuál se usaría en qué situaciones.

Aquí está mi encabezado del método api:

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

Lo que quiero hacer es básicamente interceptar el Modelbinder después de que haya llenado todas las propiedades básicas, y luego establecer algunos valores adicionales basados ​​en los encabezados de solicitud http que estableceré en el lado del cliente.

Como digo, me siento cómodo al crear encuadernadores de modelos y proveedores de encuadernación de modelos personalizados y al conectarlos, la parte con la que estoy teniendo problemas es al intentar reutilizar la funcionalidad existente proporcionada.

Gracias pete


Echa un vistazo aquí para los puntos de extensión para WebApi .

No hay un equivalente exacto para el DefaultModelBinder de MVC en WebApi.

Si está utilizando el atributo [FromBody] , se invocará FormatterParameterBinding se utilizará un MediaTypeFormatter para construir su modelo.

Los enlazadores de modelo para la ruta URI y la URL ( ModelBinderParameterBinding consulta) invocarán a ModelBinderParameterBinding que pasará a un IValueProvider o un IModelBinder ...

Asi que...

En su Field ejemplo (dependiendo del resultado de la negociación del tipo de contenido), utilizará uno de estos: XmlMediaTypeFormatter , JsonMediaTypeFormatter o FormUrlEncodedMediaTypeFormatter . Por lo tanto, depende de usted personalizar el comportamiento de serialización de estos usando sus configuraciones respectivas, por ejemplo, la configuración de JSON.NET ... o implementar su propio MediaTypeFormatter.

En su ejemplo, la appId probablemente se pasará a un IValueProvider ... como ElementalValueProvider .