繁体   English   中英

ASP.Net Forms HttpClient PostAsync 无响应,无错误消息

[英]ASP.Net Forms HttpClient PostAsync no response, no error message

我有这个代码:

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

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

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

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

像这样使用 await 可能会陷入僵局。

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

将代码更新为:

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

这将解决问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM