如何格式化异步WebAPI方法中的响应?

时间:2016-04-07 16:18:08

标签: c# asynchronous asp.net-web-api mediatypeformatter

如果我有async网络API方法,则Request对象为空(如this one等其他帖子中讨论的ID。)

在这种情况下,最常见的回复方法似乎是使用

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

但是要格式化?通常Request对象处理它,因为它知道请求了什么,但如果我没有Request对象,那么我怎么知道请求的格式?webapi

1 个答案:

答案 0 :(得分:3)

我的所有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");
}

希望有所帮助。