コントローラの例があります:
[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
[Route("Foo")]
[HttpGet]
public string Foo([FromUri] string startDate)
{
return "This is working";
}
[Route("Bar")]
[HttpPost]
public string Bar([FromBody] DateTime startDate)
{
return "This is not working";
}
}
GETリクエストを発行すると:http://localhost:53456/api/Example/Foo?startDate=2016-01-01
できます。
I POST to http://localhost:53456/api/Example/Bar
受け取りましたHTTP/1.1 400 Bad Request
エラー。
これは私のPOSTデータです:
{
"startDate":"2016-01-01T00:00:00.0000000-00:00"
}
何が悪いのですか?
非オブジェクトを直接投稿することはできません。FromBody
を使用する場合は、オブジェクトコンテナーをオブジェクトコンテナーの内側にラップする必要があります。
[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
[Route("Foo")]
[HttpGet]
public string Foo([FromUri] string startDate)
{
return "This is working";
}
[Route("Bar")]
[HttpPost]
public string Bar([FromBody] BarData data)
{
return "This is not working";
}
}
public class BarData{
public DateTime startDate {get;set;}
}
それ以外の方法couldは、=
記号を使用してこのような値をフォームエンコードする場合(非オブジェクトとして送信していることに注意してください)中括弧削除されました)。
"=2016-01-01T00:00:00.0000000-00:00"
POSTするだけです。
{
"2016-01-01T00:00:00.0000000-00:00"
}
プロパティ名を指定すると、エンドポイントはstartDate
という名前のプロパティを持つオブジェクトを受け入れる必要があります。この場合、DateTime
のみを渡します。
提出された日付の形式は重要であり、クライアントライブラリによって異なります。これは次のようになります(未加工の本文ペイロードの引用符)。
"2015-05-02T00:00:00"
中括弧、プロパティ名はありません。コードまたはクライアントライブラリ、あるいはその両方から送信される形式は、JavaScriptの日付を送信するか、日付の文字列表現を送信するかによって異なります。したがって、提出コードを適切に調整します...