2016-04-07 6 views
0

asyncウェブAPIメソッドを使用している場合、Requestオブジェクトはヌルです(他の投稿ではthis oneなど)。非同期WebAPIメソッドでレスポンスを書式設定する方法は?

この状況で応答を返すの最も一般的な手段は

return new HttpResponseMessage(HttpStatusCode.OK) { 
    Content = new ObjectContent<T>(myObj, new JsonMediaTypeFormatter()) 
}; 

しかしwhataboutフォーマットのようなものを使用しているようですか?通常はRequestオブジェクトは要求されたものを知っているのでそれを処理しますが、Requestオブジェクトがない場合は、要求された形式をどのように知るのですか?webapi

答えて

2

私のWeb APIのメソッドはすべて非同期で、データを返すことに問題はありませんでした。これは典型的なコントローラのメソッドは、私のプロジェクトの一つで次のようになります。

[HttpGet] 
[Route("v1/samples/{id}", Name="SampleGet")] 
[ResponseType(typeof(string))] 
public async Task<IHttpActionResult> Get(int id) 
{ 
    return Ok("value"); 
} 

私が言ったように、私はこれと私の現在のプロジェクトのすべてのこの一般的なパターンに従うようにそれをやって問題を抱えていたことがありません。

ユニットテストのレスポンスは次のようになります。 NUnitのとFluentAssertionsを使用してOKの応答をテストするには:

[Test] 
public async Task GetReturns200IfSuccessful() 
{ 
    //Arrange 

    //Act 
    var response = await _sut.GetAsync(); 

    //Assert 
    response.Should().BeOfType<OkNegotiatedContentResult<string>(); 
} 

あなたはレスポンスの値をチェックしたい場合は、次の操作を行います。助け

[Test] 
public async Task GetReturnsValue() 
{ 
    //Act 
    var response = await _sut.GetAsync(); 
    var result = response as OkNegotiatedContentResult<AssetList>; 

    //Assert 
    result.Should().Be("value"); 
} 

希望を。

+0

これは有望だと思われますが、返されたステータスコードなどの単体テストはどうですか? 'response.ExecuteAsync(CancellationToken.None).Result.StatusCode'はnull参照例外をスローします。 – awj

+0

ユニットテストの例をいくつか追加しました – MichaelDotKnox

関連する問題