簡體   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