C# 当返回的异常为“时,如何获取web响应异常流”;“聚合异常”;而不是",;WebException“;
我调用一个internet资源,当它返回“404NotFound”时,它会在响应流中发送更多信息 第一个代码示例使用VS 2017中的新异步方法,如果对资源的调用失败并显示“404未找到”,则抛出AggregateException。AggregateException或其中包含的任何InnerException或BaseException似乎都不包含响应流: 1:C# 当返回的异常为“时,如何获取web响应异常流”;“聚合异常”;而不是",;WebException“;,c#,C#,我调用一个internet资源,当它返回“404NotFound”时,它会在响应流中发送更多信息 第一个代码示例使用VS 2017中的新异步方法,如果对资源的调用失败并显示“404未找到”,则抛出AggregateException。AggregateException或其中包含的任何InnerException或BaseException似乎都不包含响应流: 1: 可以修改代码示例1,以便从AggregateException aex获取响应流?似乎我找到了上述问题的解决方案。我将示例1修改为
可以修改代码示例1,以便从AggregateException aex获取响应流?似乎我找到了上述问题的解决方案。我将示例1修改为:
HttpClient myClient = new HttpClient;
Task<HttpResponseMessage> respTask1;
Task<byte[]> respTask2;
byte[] resultdata;
Uri reqUri = new Uri(query.ToString());
HttpRequestMessage webreq = new HttpRequestMessage(HttpMethod.Get, reqUri);
respTask1 = myClient.GetAsync(webreq.RequestUri, HttpCompletionOption.ResponseHeadersRead);
//only retrieve the headers at this stage, stream data will be retrieved below
httpmsg = respTask1.Result;
respTask2 = httpmsg.Content.ReadAsByteArrayAsync();
//now retrieve the response data in a second task
resultdata = respTask2.Result;
HttpClient myClient=新的HttpClient;
任务1;
任务2;
字节[]结果数据;
Uri reqUri=新Uri(query.ToString());
HttpRequestMessage webreq=新的HttpRequestMessage(HttpMethod.Get,reqUri);
respTask1=myClient.GetAsync(webreq.RequestUri,HttpCompletionOption.ResponseHeadersRead);
//在此阶段仅检索头,下面将检索流数据
httpmsg=respTask1.结果;
respTask2=httpmsg.Content.ReadAsByteArrayAsync();
//现在在第二个任务中检索响应数据
resultdata=respTask2.结果;
在“404未找到”的情况下,此代码既不会抛出AggregateException,也不会抛出HttpRequestException,因此这两个代码中都没有响应流是没有问题的。“404NotFound”代码在响应头中(我认为它是StatusCode头),关联的响应流在字节数组中
try
{
HttpWebResponse webResp;
HttpWebRequest httpReq;
httpReq = (HttpWebRequest)WebRequest.Create(query.ToString());
httpReq.Method = "GET";
webResp = (HttpWebResponse)httpReq.GetResponse();
}
catch(WebException wex)
{
Stream ReceiveStream = wex.Response.GetResponseStream();
}
HttpClient myClient = new HttpClient;
Task<HttpResponseMessage> respTask1;
Task<byte[]> respTask2;
byte[] resultdata;
Uri reqUri = new Uri(query.ToString());
HttpRequestMessage webreq = new HttpRequestMessage(HttpMethod.Get, reqUri);
respTask1 = myClient.GetAsync(webreq.RequestUri, HttpCompletionOption.ResponseHeadersRead);
//only retrieve the headers at this stage, stream data will be retrieved below
httpmsg = respTask1.Result;
respTask2 = httpmsg.Content.ReadAsByteArrayAsync();
//now retrieve the response data in a second task
resultdata = respTask2.Result;