2012-09-12 21 views
5

sto ottenendo alcuni dati JSON inviati ad asp.net mia WebAPI, ma il parametro post è sempre arrivando null - i dati non viene serializzato correttamente. Il metodo simile a questa:Come posso forzare asp.net WebAPI per decodificare i dati POST sempre come JSON

public HttpResponseMessage Post(string id, RegistrationData registerData) 

sembra che il problema è che il cliente (che non ho alcun controllo su) è sempre inviando il tipo di contenuto come x-www-form-urlencoded, anche se il contenuto è in realtà JSON. Ciò fa sì che mvc provi a deserializzarlo come dati del modulo, che non riesce.

C'è un modo per ottenere WebAPI deserializzare sempre come JSON, e di ignorare l'intestazione del tipo di contenuto?

risposta

8

ho trovato la risposta qui: http://blog.cdeutsch.com/2012/08/force-content-types-to-json-in-net.html

Questo codice deve essere aggiunto alla 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); 

dice al formattatore JSON ad accettare ogni tipo, e rimuove la forma e xml formattatori

1

Suggerirei di modificare piuttosto il tipo di contenuto della richiesta in entrata, diciamo al gestore del messaggio al tipo di contenuto appropriato, piuttosto che rimuovere i formattatori dalla configurazione

+0

È possibile applicare un filtro come questo prima che la richiesta venga elaborata? So come farlo nel normale mvc, ma non in webapi – Nathan

+0

@NathanReed Sto provando a farlo in MVC normale :) Come lo faresti? –

Problemi correlati