【问题标题】:ASP.Net Forms HttpClient PostAsync no response, no error messageASP.Net Forms HttpClient PostAsync 无响应,无错误消息
【发布时间】:2016-08-24 15:16:46
【问题描述】:

我有这个代码:

using (var client = new HttpClient())
{
    var values = new Dictionary<string, string>
        {
            {"site_id","001"},
            {"apikey","abc01201az1024"},
            {"trans_id","45364136"},
        };

    // Get the parameters in the url encoded format
    var content = new FormUrlEncodedContent(values);

    //Send request
    var response = await client.PostAsync(url, content);

  DataRoot<Transaction> outPut = null;
                if (response.IsSuccessStatusCode)
                {
                    //Get Response
                    var result = await response.Content.ReadAsStringAsync();
                    JsonConvert.DeserializeObject<DataRoot<Transaction>>(result);
                }

                return outPut;
}

在此阶段处于调试模式,代码不产生任何响应,没有错误代码但停止运行:

//Send request
var response = await client.PostAsync(url, content);

【问题讨论】:

  • “停止运行”是什么意思?它只是停在那条线上还是完全退出?
  • 在该行应用程序挂起几秒钟,然后停止。代码不会转到下一行。
  • 但是你没有对response对象做任何事情,你想要发生什么?
  • 我确实使用了响应对象,但由于在该行停止运行,应用程序无法访问其他代码行
  • 响应对象在填充后立即超出范围,因此无法在此代码的 sn-p 之外使用。

标签: c# asp.net httpclient


【解决方案1】:

可能有更好的方法,但这解决了我的问题。使用等待从另一个人调用您的方法:-

    public static async Task<string> AuthenticateUser()
    {
        var t = Task.Run(() => ClassObject.AuthenticateUser("me"));
        t.Wait();

        Console.WriteLine(t.Result);
        Console.ReadLine();
        return "ok";
    }

【讨论】:

    【解决方案2】:

    像这样使用 await,可能会陷入死锁。

    您可以在异步方法中使用ConfigureAwait(false) 来防止此类死锁。

    将代码更新为:

    var response = await client.PostAsync(url, content).ConfigureAwait(false);
    

    这将解决问题。

    【讨论】:

      【解决方案3】:

      您确定它实际上没有返回响应并继续执行吗?因为等待 client.PostAsync() 调用,所以可能会在不同的线程上继续执行。因此,如果您只是逐行调试(通过 F10 或类似方法),则该方法可能永远不会返回;实际上整个方法已经执行完毕,你的程序正在运行。

      您可能需要在方法中添加另一个断点(在 PostAsync 方法调用之后)。当 PostAsync 方法在不同的线程上返回时,您的调试器应该命中下一个断点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多