2012-09-12 4 views
5

私のasp.net webapiにいくつかのjsonデータがポストされていますが、postパラメータは常にnullになります。この方法は、このようなものになります。asp.net webapiが常にJSONとしてPOSTデータをデコードするようにするには

public HttpResponseMessage Post(string id, RegistrationData registerData) 

を問題は(私が制御することはできません)、クライアントは常にコンテンツが実際にJSONであっても、x-www-form-urlencodedなどのコンテンツタイプを送信しているということであるようです。これにより、mvcはフォームデータとして逆シリアル化しようとしますが、これは失敗します。

webapiを常にjsonとして非直列化し、content-typeヘッダーを無視する方法はありますか?

答えて

8

私はここで答えを見つけました:http://blog.cdeutsch.com/2012/08/force-content-types-to-json-in-net.html

をこのコードはのApplication_Startに追加する必要があるか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); 

それはすべてのタイプを受け入れるようにJSONフォーマッタを伝え、そしてフォームとxmlを削除しますフォーマッタ

1

受信側のリクエストのコンテンツタイプを変更することをお勧めします。メッセージハンドラで適切なコンテンツタイプを指定すると、コンフィグレーションからフォーマットを削除するのではなく

+0

リクエストを処理する前にこのようなフィルタを適用することはできますか?私は通常のMVCでこれを行う方法を知っているがwebapiではない – Nathan

+0

@ NathanReed私はこれを通常のMVCでやろうとしています:)あなたはどのようにしますか? –

関連する問題