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 .