2013-03-25 9 views
6

CORSを使用してAJAXポストからサーバーに複雑なオブジェクトをPOST(またはPUT)したいとします。残念ながら、IE8はCORSを使用していて、application/jsonではなく、テキスト/プレーンの送信のみをサポートしています。CORSを使用したWebAPIの複雑なオブジェクトとしてのtext/plainの投稿

WebAPIにハンドラを実装して、テキスト/プレーン送信をカスタム解析する方法はありますか。複雑なオブジェクトによって

私は通常、私はできるだけ早くあなたはそれがとてもアクセス拒否で失敗ヘッダがあることが必要である設定として適切に設定、ヘッダーといくつかのJSONに投稿したが原因IE8の制限に思い

public void POST([FromBody] MyCustomObject myResponse) 
{ 
    return null; 
} 

を意味しますテキスト/プレーンなので、私はJSON文字列を送るが、テキスト/プレーン(醜い私は知っている!)だが、より良い選択肢がないために...

答えて

8

あなたWEBAPIアプリケーションが実際にはJSONを使用している場合、あなたはそれが常にJSONで応答し、要求のコンテンツタイプは無視され、このソリューションを使用できます。それから、

How can I force asp.net webapi to always decode POST data as JSON

を、私はこのソリューションをお勧めします:

このコードは、それを伝えるのApplication_Startに追加する必要があるかWebApiConfig.Register

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain")); 
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter); 
config.Formatters.Remove(config.Formatters.XmlFormatter); 

jsonフォーマッタはプレーンテキストのcontent-typeを受け取り、フォームとxmlフォーマッタは削除します(ただし、削除する必要はありません)

+1

ありがとう。これは私の仕事で、POST、DELETE、PUTのときにプリフライトを防ぐためにこれを使用します。 – JimiOr2

1

醜いが、タイプ・ヘッダーをtext/plainからapplication/jsonにメッセージ・ハンドラーで渡すことで、jsonフォーマッターでパラメーター・バインディングが正しく行われるようにします。