为什么我的WebApi客户端只能发出一个GET请求?

本文关键字:一个 GET 请求 WebApi 我的 客户端 为什么 | 更新日期: 2023-09-27 18:14:21

我为我的web服务编写了一个简单的带有web Api的客户端,如本教程所述:

http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client

第一个请求(GET一个表)成功执行。也就是说,从web服务获取表数据并绑定到 tablecent 对象。

但是程序在执行第二个请求(GET表列表)之前被完全阻塞;什么也没有发生,甚至没有错误消息!

如果我注释掉与第一个请求(GET表)相关的代码部分,第二个请求(GET表列表)将成功执行。

这里发生了什么?为什么这个客户端只能执行一个GET请求?

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:56510/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpResponseMessage response;
    // GET a table from web service
    response = await client.GetAsync("api/table/GetMatrixTable");
    if (response.IsSuccessStatusCode)
    {
        var tblcont = await response.Content.ReadAsAsync<TableContent>();
        // do things ...
    }
    // GET a table list from web service
    response = await client.GetAsync("api/table/GetTableList");
    if (response.IsSuccessStatusCode)
    {
        var TblContList = await response.Content.ReadAsAsync<IList<TableContent>>();
        // do things ...
    }
}

为什么我的WebApi客户端只能发出一个GET请求?

看看下面的SO问题及其公认的答案(可能不是直接相关,但仍然有用):

  • HttpClient.GetAsync(…)永远不会返回当使用await/async

如果您按照以下方式替换对GetAsync()的调用可能会有所帮助:

response = await client.GetAsync("api/table/GetMatrixTable",
                 HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);
. . .
response = await client.GetAsync("api/table/GetTableList",
                 HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false);

我无法测试,所以我不能把功劳都揽在这上面。