【发布时间】:2017-09-25 00:22:51
【问题描述】:
我正在使用HttpClient 尝试在 Web API 控制器中执行 POST 方法。控制器方法是同步的。我是这样做的:
var response = owin.HttpClient.PostAsJsonAsync(uri, body);
之后我打电话给Wait:
var result = response.Wait(15000);
运行此代码时,我看到 http 完成执行,但 result 值始终为 false。我会错过什么?
编辑: 我现在尝试了一种异步方法,但它也没有帮助我
public IHttpActionResult Add(Item item)
{
var result = _db.AddItem(item);
return Ok(result);
}
测试项目:
TestServer _owinTestServer;
public async Task<HttpResponse message> Method1(string url, object body)
{
return await
_owinTestServer.HttpClient.PostAsJsonAsync(url,body);
}
public async Task<ItemPreview> Method2(object body);
{
return await Method1("..", body ).Result.Content.ReadAsAsync<ItemPreview>();
}
[TestMethod]
public void test1()
{
Item item = new(...);
Method2(item).Continue with(task => {// Never reach here }
}
我做错了什么? 调试时,我看到控制器方法返回了一个很好的响应,但它永远不会回到我的测试中
【问题讨论】:
-
如果您使用异步 API,调用
Wait()有什么意义?你最好使用await。 -
因为没有办法使用
HttpClient以同步方式发布数据,否则我会同步进行。由于某种原因,当我尝试使用await时遇到了死锁 -
首先,我不会在
async中推荐Wait,始终使用await。其次,请发布导致死锁的完整代码,这样我们就可以对实际问题进行排序,而不是混合阻塞和非阻塞代码。 -
@Razort4x 我发布了我的代码
标签: c# unit-testing asp.net-web-api async-await owin