2016-08-22 4 views
1

私はAPIを呼び出すためにHttpClientを使用しています。私は、オブジェクトを構築し、このようPostAsJsonAsyncにそれを渡しています:HttpClient PostAsJsonAsyncを使用してAPIを呼び出すと、APIで複合型を正しく受け入れることができますか?

var foo = new Foo 
{ 
    //We will say these are the only two properties on the model: 
    Id = 1, 
    Name = "Test" 
}; 

var response = await httpClient.PostAsJsonAsync("myApiPath/mytest", foo); 

その後、私のAPIに私がfooオブジェクトを取得し、それをいくつかのものを行うと、このようなHttpStatusCodeを返すようにしようとしています:

[Route("mytest")] 
    [HttpPost] 
    public HttpResponseMessage MyTest<T>(T foo) 
    { 
     //Do some stuff, and return the status code 
     return Request.CreateResponse(HttpStatusCode.OK); 
    } 

<T>を使用すると、これはうまくいかず、500エラーが発生します。ちょうど私がAPIのネタを得ることができたことを確認して、私に何かを渡す

"someRandomString"fooを変更して、APIで、私はちょうどこのように文字列を受け入れるようにMyTestを変更:public HttpResponseMessage MyTest(string someRandomString) { }、それがうまく働きました。

APIに正しく渡される複合型を取得するにはどうすればよいですか?

答えて

2

コントローラのアクションは、一般的なことではないはずです。

もちろん Fooクラスを使用すると、クライアントに持つ同じプロパティと一致する
[Route("mytest")] 
[HttpPost] 
public HttpResponseMessage MyTest(Foo foo) 
{ 
    //Do some stuff, and return the status code 
    return Request.CreateResponse(HttpStatusCode.OK); 
} 

。コードの重複を避けるため、Webアプリケーションとクライアントアプリケーション間で共有される個別のプロジェクトで契約書を宣言することができます。

+0

返信いただきありがとうございます。あなたの返信の直前に、私は同じモデル 'dll'を参照していて、同じモデルを回してみようとしていました。私が正しい道にいたことを知ってうれしい。 – maxshuty

+0

はい、正しい経路にあります。 –

関連する問題