awj*_*awj 1 c# asynchronous asp.net-web-api mediatypeformatter
如果我有一个asyncWeb API 方法,则该Request对象为 null(正如其他帖子(例如这篇文章中讨论的 id ))。
在这种情况下返回响应的最常见方法似乎是使用类似
return new HttpResponseMessage(HttpStatusCode.OK) {
Content = new ObjectContent<T>(myObj, new JsonMediaTypeFormatter())
};
Run Code Online (Sandbox Code Playgroud)
但是格式呢?通常,Request对象会处理该问题,因为它知道请求的内容,但如果我没有对象,Request那么我如何知道请求的格式?
我的所有 Web API 方法都是异步的,并且我在返回数据时从未遇到过问题。这是我的一个项目中典型的控制器方法的样子:
[HttpGet]
[Route("v1/samples/{id}", Name="SampleGet")]
[ResponseType(typeof(string))]
public async Task<IHttpActionResult> Get(int id)
{
return Ok("value");
}
Run Code Online (Sandbox Code Playgroud)
就像我说的,我这样做从来没有遇到过问题,而且我当前的所有项目都遵循这个一般模式。
单元测试响应如下所示。要使用 NUnit 和FluentAssertions测试 OK 响应:
[Test]
public async Task GetReturns200IfSuccessful()
{
//Arrange
//Act
var response = await _sut.GetAsync();
//Assert
response.Should().BeOfType<OkNegotiatedContentResult<string>();
}
Run Code Online (Sandbox Code Playgroud)
如果您想检查响应的值,请执行以下操作:
[Test]
public async Task GetReturnsValue()
{
//Act
var response = await _sut.GetAsync();
var result = response as OkNegotiatedContentResult<AssetList>;
//Assert
result.Should().Be("value");
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助。