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

How to format response in an async WebAPI method?

如果我有一个 async web API 方法,那么 Request 对象为 null(如 this one 等其他帖子中讨论的 id)。

似乎在这种情况下返回响应的最常用方法是使用类似

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

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

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

希望对您有所帮助。