2016-08-17 20 views
3

にDateTime値を投稿する方法:それが動作http://localhost:53456/api/Example/Foo?startDate=2016-01-01私は例のコントローラを持ったWeb API 2コントローラ

[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/BarにPOSTすると、HTTP/1.1 400 Bad Requestエラーが表示されます。

これは私のPOSTデータです:

{ 
"startDate":"2016-01-01T00:00:00.0000000-00:00" 
} 

私が間違っているのか?

+0

どのように投稿していますか?コードを共有できますか? – Shyju

+0

@Shyjuこれは基本的にすべてのコードです(下記のIgorの答えを参照してください)。私はそれを働かせた –

答えて

3

非オブジェクトを直接投稿することはできません。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;} 
} 

あなたがエンコードを形成する場合、それはでし作業が=シンボル使用して、このような値(あなたは非オブジェクトとしてそれを送信しているノートは、中括弧はを削除されている)され、他の方法。

"=2016-01-01T00:00:00.0000000-00:00" 
+0

それは働いた!単純な日付をPOSTすることを望んでいたが、オブジェクト内にDateTimeプロパティを置いているようだ。 –

+0

@PierreNortje - フォームエンコードされた方法で試すこともできますが、実際にはラッパーオブジェクトを使用するのが最善の解決策です(下のupdateを参照)。 – Igor

+0

@PierreNortje - 便利な回答が見つかった場合は、忘れずに回答としてマークしてください。ありがとう! – Igor

3

だけ投稿してみてください:

{ 
    "2016-01-01T00:00:00.0000000-00:00" 
} 

startDateという名前のプロパティを持つオブジェクトを受け入れる必要があるでしょう、あなたのエンドポイントを意味し、プロパティ名を指定します。この場合、DateTimeを渡すだけです。

0

送信される日付の形式は重要です。クライアントのライブラリによって異なります。

"2015-05-02T00:00:00" 

中括弧はなく、プロパティ名はありません。あなたのコードやクライアントライブラリから送信されるフォーマットは、JavaScriptの日付を送るのか、それとも文字列を表すのかによって異なります。だから、投稿コードを適切に微調整してください...

+0

パラメータバインディングの簡単で正確な説明は次のとおりです。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-ウェブAPI – Jim

関連する問題