ASP.NET窗体HttpClient PostAsync无响应,无错误消息

fgw7neuy  于 2023-04-13  发布在  .NET
关注(0)|答案(3)|浏览(457)

我有这个代码:

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);
l2osamch

l2osamch1#

像这样使用await可能会导致死锁。
您可以在异步方法中使用ConfigureAwait(false)来防止此类死锁。
将代码更新为:

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

这将解决问题。

yi0zb3m4

yi0zb3m42#

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

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

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

unhi4e5o3#

你确定它实际上没有返回响应并继续执行吗?因为客户端.PostAsync()调用被等待,执行可能会在不同的线程上继续。因此,如果你只是逐行调试(通过F10或类似方式),它可能看起来永远不会返回;实际上,整个方法已经完成执行,程序正在运行。
您可能需要在方法中添加另一个断点(在PostAsync方法调用之后)。当PostAsync方法在不同的线程上返回时,调试器应命中下一个断点。

相关问题