Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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# 当返回的异常为“时,如何获取web响应异常流”;“聚合异常”;而不是",;WebException“;_C# - Fatal编程技术网

C# 当返回的异常为“时,如何获取web响应异常流”;“聚合异常”;而不是",;WebException“;

C# 当返回的异常为“时,如何获取web响应异常流”;“聚合异常”;而不是",;WebException“;,c#,C#,我调用一个internet资源,当它返回“404NotFound”时,它会在响应流中发送更多信息 第一个代码示例使用VS 2017中的新异步方法,如果对资源的调用失败并显示“404未找到”,则抛出AggregateException。AggregateException或其中包含的任何InnerException或BaseException似乎都不包含响应流: 1: 可以修改代码示例1,以便从AggregateException aex获取响应流?似乎我找到了上述问题的解决方案。我将示例1修改为

我调用一个internet资源,当它返回“404NotFound”时,它会在响应流中发送更多信息

第一个代码示例使用VS 2017中的新异步方法,如果对资源的调用失败并显示“404未找到”,则抛出AggregateException。AggregateException或其中包含的任何InnerException或BaseException似乎都不包含响应流:

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;