尝试 Catch Async WebRequest Put
Try Catch Async WebRequest Put
我在将此编码为 try 和 catch 时遇到了一些问题...我已经在几个地方尝试了 try catch,例如编码之前、写入之前的等待内、刷新之前但没有好运...
var encoder = new ASCIIEncoding();
var data = encoder.GetBytes(limitBody);
req.ContentLength = data.Length;
await req.GetRequestStreamAsync().ContinueWith(trs =>
{
trs.Result.Write(data, 0, data.Length);
trs.Result.Flush();
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate
{
Methods.ReadStreamFromResponse(req.GetResponse(), requestUri, siteCode, correlationtoken, "PUT",
txtLimitsResponse, null, limitBody, _userId);
});
});
每当远程服务器 returns 出现错误:(400) 错误请求。
应用程序中断,如何捕获此错误并将其输出给用户?
非常感谢
您应该可以将 try/catch
放在 await
周围。它已经将该方法的其余部分注册为延续,因此您不需要 ContinueWith
,如果您从 UI 线程调用它,则不需要 Dispatcher.Invoke
作为 await
存储当前的 SynchornizationContext
并在 await
之后恢复它。因此该方法的其余部分也会在 UI 线程上 运行。
var encoder = new ASCIIEncoding();
var data = encoder.GetBytes(limitBody);
req.ContentLength = data.Length;
try
{
var result = await req.GetRequestStreamAsync();
result.Write(data, 0, data.Length);
result.Flush();
Methods.ReadStreamFromResponse(req.GetResponse(), requestUri, siteCode, correlationtoken, "PUT",
txtLimitsResponse, null, limitBody, _userId);
}
catch(...)
{
....
}
我在将此编码为 try 和 catch 时遇到了一些问题...我已经在几个地方尝试了 try catch,例如编码之前、写入之前的等待内、刷新之前但没有好运...
var encoder = new ASCIIEncoding();
var data = encoder.GetBytes(limitBody);
req.ContentLength = data.Length;
await req.GetRequestStreamAsync().ContinueWith(trs =>
{
trs.Result.Write(data, 0, data.Length);
trs.Result.Flush();
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate
{
Methods.ReadStreamFromResponse(req.GetResponse(), requestUri, siteCode, correlationtoken, "PUT",
txtLimitsResponse, null, limitBody, _userId);
});
});
每当远程服务器 returns 出现错误:(400) 错误请求。
应用程序中断,如何捕获此错误并将其输出给用户?
非常感谢
您应该可以将 try/catch
放在 await
周围。它已经将该方法的其余部分注册为延续,因此您不需要 ContinueWith
,如果您从 UI 线程调用它,则不需要 Dispatcher.Invoke
作为 await
存储当前的 SynchornizationContext
并在 await
之后恢复它。因此该方法的其余部分也会在 UI 线程上 运行。
var encoder = new ASCIIEncoding();
var data = encoder.GetBytes(limitBody);
req.ContentLength = data.Length;
try
{
var result = await req.GetRequestStreamAsync();
result.Write(data, 0, data.Length);
result.Flush();
Methods.ReadStreamFromResponse(req.GetResponse(), requestUri, siteCode, correlationtoken, "PUT",
txtLimitsResponse, null, limitBody, _userId);
}
catch(...)
{
....
}