【问题标题】:ASP.NET Core synchronously wait for http requestASP.NET Core 同步等待 http 请求
【发布时间】:2022-11-11 00:24:35
【问题描述】:

我有一个外部端点,我调用它来获取一些 Json 响应。 该端点将启动与 POS 设备的会话,因此设备将显示请求详细信息并要求客户输入他的信用卡以完成付款,然后当客户完成时; POS 将调用端点并将结果返回给我的应用程序。

这里的问题是我需要按照这个场景中的描述完成操作(同步)。

当我从邮递员那里调用这个端点时;它等待了很多时间(直到 POS 收到请求并且客户进行输入,然后将结果返回给端点,端点将结果返回给邮递员)......这一切都很好。

问题是当我从 ASP.NET Core 应用程序执行此操作时,不会等待端点的请求,而是直接使用 null 返回响应。

我需要一些东西来等待它。

using (var client = new HttpClient())
{
        client.DefaultRequestHeaders.Add("x-API-Key", "ApiKey");
        client.DefaultRequestHeaders.Add("Connection", "keep-alive");
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var postTask = client.PostAsJsonAsync(new Uri("terminalEndpoint here"), dto);//dto is the request payload

        postTask.Wait();

        var result = postTask.Result;

        if (result.IsSuccessStatusCode)
        {
            //Should hang after this line to wait for POS
            var terminalPaymentResponseDto =  result.Content.ReadAsAsync<InitiateTerminalPaymentResponseDto>().Result;

            //Should hit this line after customer finishes with POS device
            return terminalPaymentResponseDto;
        }
    }

【问题讨论】:

    标签: asp.net-core httpclient asp.net-core-6.0


    【解决方案1】:

    为什么不使用下面的await?并确保将函数更改为async

    var postTask = await client.PostAsJsonAsync(new Uri("terminalEndpoint here"), dto);
    var result = postTask.Result;
    

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      相关资源
      最近更新 更多