MVC(MVC4)アプリケーションがあり、サードパーティから特定のURL( " http://server.com/events/ ")にJSONイベントがPOSTされる場合があります。JSONイベントはHTTPPOSTの本文にあり、本文は厳密にJSONです(Content-Type: application/json
文字列フィールドにJSONが含まれるフォームポストではありません)。
コントローラの本体内でJSON本体を受け取るにはどうすればよいですか?次のことを試しましたが、何も得られませんでした
[編集] :何も得られなかったと言ったとき、私が定義したObject
かどうかに関係なく、jsonBodyは常にnullであることを意味しましたstring
。
[HttpPost]
// this maps to http://server.com/events/
// why is jsonBody always null ?!
public ActionResult Index(int? id, string jsonBody)
{
// Do stuff here
}
強く型付けされた入力パラメーターを使用してメソッドを宣言すると、MVCが解析とフィルタリング全体を実行することを知っていることに注意してください。
// this tested to work, jsonBody has valid json data
// that I can deserialize using JSON.net
public ActionResult Index(int? id, ClassType847 jsonBody) { ... }
ただし、取得するJSONは非常に多様であるため、JSONバリアントごとに数百の異なるクラスを定義(および維持)する必要はありません。
私は次のcurl
コマンドでこれをテストしています(ここではJSONの1つのバリアントを使用)
curl -i -H "Host: localhost" -H "Content-Type: application/json" -X POST http://localhost/events/ -d '{ "created": 1326853478, "data": { "object": { "num_of_errors": 123, "fail_count": 3 }}}