Skip to main content
 首页 » 编程设计

c#之如何在异步 WebAPI 方法中格式化响应

2024年05月06日41zhoujg

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

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

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

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

请您参考如下方法:

我所有的 Web API 方法都是异步的,而且我在返回数据时从未遇到过问题。这是我的一个项目中典型的 Controller 方法的样子:

[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"); 
} 

希望对您有所帮助。