2012-09-12 10 views
5

? Estoy obteniendo algunos datos json publicados en mi asp.net webapi, pero el parámetro post siempre es nulo - los datos no se serializan correctamente. El método es como la siguiente:¿Cómo puedo obligar a asp.net webapi a decodificar siempre los datos POST como JSON

public HttpResponseMessage Post(string id, RegistrationData registerData) 

Parece que el problema es que el cliente (que no tengo ningún control sobre) siempre está enviando el tipo de contenido como x-www-form-urlencoded, a pesar de que el contenido es en realidad JSON. Esto hace que mvc intente deserializarlo como datos de formulario, que falla.

¿Hay alguna forma de hacer que webapi siempre se deserialice como json e ignorar el encabezado de tipo de contenido?

Respuesta

8

he encontrado la respuesta aquí: http://blog.cdeutsch.com/2012/08/force-content-types-to-json-in-net.html

Este código debe ser añadido a Application_Start o WebApiConfig.Register

foreach (var mediaType in config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes) 
{ 
    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(mediaType); 
} 

config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter); 
config.Formatters.Remove(config.Formatters.XmlFormatter); 

le dice al formateador JSON para aceptar todo tipo, y elimina la forma y XML Formateadores

1

Yo sugeriría modificar el tipo de contenido de la solicitud entrante, digamos en el manejador de mensajes al tipo de contenido apropiado, en lugar de eliminar los formateadores de la configuración

+0

¿Es posible aplicar un filtro como este antes de procesar la solicitud? Sé cómo hacer esto en mvc normal, pero no en webapi – Nathan

+0

@NathanReed Estoy intentando hacer esto en MVC normal :) ¿Cómo lo harías? –

Cuestiones relacionadas