C# HttpClient.PostAsync崩溃应用程序。如何捕获异常?
我正在尝试测试此HttpRequest: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 {
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);