Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient.PostAsync崩溃应用程序。如何捕获异常?_C#_.net_Wpf_.net Core_Dotnet Httpclient - Fatal编程技术网

C# HttpClient.PostAsync崩溃应用程序。如何捕获异常?

C# HttpClient.PostAsync崩溃应用程序。如何捕获异常?,c#,.net,wpf,.net-core,dotnet-httpclient,C#,.net,Wpf,.net Core,Dotnet Httpclient,我正在尝试测试此HttpRequest: public void TestX(string baseUrl) { StringContent httpContentDistanza = new StringContent(GlobalVariables.JsonDistanza); using HttpClient httpClient = new HttpClient {

我正在尝试测试此HttpRequest:

 public void TestX(string baseUrl)
        {
            StringContent httpContentDistanza = new StringContent(GlobalVariables.JsonDistanza);
            using HttpClient httpClient = new HttpClient
            {
                BaseAddress = new Uri(baseUrl)
            };

            HttpResponseMessage responseMessage = null;

            try
            {
                responseMessage = httpClient.PostAsync("/xxx/xx/xxx", httpContentDistanza).Result;
              // can't reach the code below
                if (responseMessage.IsSuccessStatusCode)
                {
                    string strContext = responseMessage.Content.ReadAsStringAsync().Result;

                    var risultato = JsonSerializer.Deserialize<Distanza1>(strContext);

                    GlobalVariables.DblAijCrnPsz = risultato.data.processDataIn.valore;
                }
            }
            catch (Exception ex)
            {
                if (responseMessage == null)
                {
                    responseMessage = new HttpResponseMessage();
                }
                responseMessage.StatusCode = HttpStatusCode.InternalServerError;
                responseMessage.ReasonPhrase = string.Format("RestHttpClient.SendRequest failed: {0}", ex);
            
            }
        }
更新

我不知道我做错了什么。。我仍然无法捕获异常:

     public async Task TestX(string baseUrl)
            {
              StringContent httpContentDistanza = new  StringContent(GlobalVariables.JsonDistanza);

              using HttpClient httpClient = new HttpClient
               {
                  BaseAddress = new Uri(baseUrl)
               };
        
               HttpResponseMessage responseMessage = null;
             
                try
                {
                    responseMessage = await client.PostAsync("/xxx/xxx/xx", httpContentDistanza);
    
                    if (responseMessage.IsSuccessStatusCode)
                    {
                        string strContext = await responseMessage.Content.ReadAsStringAsync();
    
                     var risultato = JsonSerializer.Deserialize<Distanza1>(strContext);

                    }
                }
                catch(Exception ex)
                {
                    var error = ex.Message;
                }
它在此处崩溃responseMessage=wait httpClient.PostAsync/xxx/xx/xxx,httpContentDistanza;但在ResetAll和var x=中停止

我以前见过和读过类似的问题,但没有解决办法。
有没有关于如何捕获异常的建议?

您应该更改以下内容:

public void TestX(string baseUrl) 

还有这个

responseMessage = httpClient.PostAsync("/xxx/xx/xxx",httpContentDistanza).Result;


然后你可以处理异常。

也许可以检查一下你从POST得到的结果?如果它是一个未知的子网站,您将获得404 HttpCode。也许是那个帮助秀?在ponseMessage=httpClient.PostAsync/xxx/xx/xxx之后,是httpContentDistanza.Result;它会崩溃,并且不会到达您在同步上下文中调用的任何代码行和异步方法。所以基本上PostAsync不会阻塞并在另一个线程上下文上运行。您需要做的是将异步调用放在异步方法中,并用await修饰调用,或者为HttpClient使用同步重载。PostBtw,调用和响应必须是即时的,这就是为什么我不想使用Async和await。是什么让您认为async/await使它不那么即时?您不妨尝试一下async/Wait,它不会比您现在的速度慢;一开始我就这么做过。都一样。我只是更新了我的问题
public async Task TestX(string baseUrl)
responseMessage = httpClient.PostAsync("/xxx/xx/xxx",httpContentDistanza).Result;
responseMessage = await httpClient.PostAsync("/xxx/xx/xxx", httpContentDistanza);