当前位置: 首页 > 编程语言 > C#

如何从HttpRequestException获取JSON错误信息分享

时间:2023-04-10 20:10:39 C#

如何从HttpRequestException获取JSON错误信息可以完成(在catch中使用await)。此外,如果我在捕获后执行此操作,则HttpResponseMessage会被“处置”。代码:privateasyncvoidMakeHttpClientPostRequest(){HttpResponseMessageresponse=null;尝试{HttpClienthttpClient=newHttpClient();httpClient.Timeout=TimeSpan.FromSeconds(15);HttpContenthttpContent=null;if(postJSON!=null){httpContent=newStringContent(postJSON);httpContent.Headers.ContentType=newMediaTypeHeaderValue("application/json");}response=awaithttpClient.PostAsync(url,httpContent);如果(响应!=null){response.EnsureSuccessStatusCode();netResults=awaitresponse.Content.ReadAsStringAsync();}if(this.convertedType!=null){MemoryStreamassetReader=GetMemoryStreamFromString(netResults);assetReader.Position=0;对象值=fromJSON(assetReader,this.convertedType);networkReqSuccessWithObjectCallback(这个,值);}else{//将netResult作为字符串返回。networkReqSuccessWithStringCallback(这个,netResults);}}catch(TaskCanceledException){ErrorExceptionee=null;ee=newErrorException("RequestTimeOut");NotifyNetworkDelegates(ee);}catch(HttpRequestExceptionex){//这里我必须提取服务器发送的JSON字符串}catch(Exception){}}这可以做什么?使用HttpWebRequest更新以前的方法:publicvoidMakePostWebRequest(){//WebCalls使用HttpWebrequest.HttpWebRequestrequest=(HttpWebRequest)HttpWebRequest.Create(url);request.CookieContainer=newCookieContainer();request.ContentType="application/json";request.Method="POST“;requestState=RequestState.ERequestStarted;asyncResult=request.BeginGetRequestStream(newAsyncCallback(GetRequestStream),request);}privatevoidGetRequestStream(IAsyncResultasyncResult){HttpWebRequestrequest=(HttpWebRequest)asyncResult.AsyncState;{try{StreamrequestStream=request.EndGetRequestStream(asyncResult);if(request!=null){using(requestStream){StreamWriterwriter=newStreamWriter(requestStream);writer.Write(postJSON);writer.Flush();}}}捕获(WebExceptionwe){}}}privatevoidGetResponseStream(IAsyncResultasyncResult){requestState=RequestState.EResponseStream;HttpWebRequestrequest=asyncResult.AsyncStateasHttpWebRequest;HttpWebResponse响应;尝试{response=(HttpWebResponse)request.EndGetResponse(asyncResult);使用(StreamReaderreader=newStreamReader(response.GetResponseStream())){netResults=reader.ReadToEnd();}requestState=RequestState.ERequestCompleted;}catch(WebExceptionwe){//失败ErrorExceptionee=null;response=we.Response作为HttpWebResponse;if(response!=null){using(StreamReaderreader=newStreamReader(response.GetResponseStream())){//HERE我收到json错误消息netResults=reader.读到结束();}}}catch(Exceptione){networkReqFailedCallback(this,e);我强烈怀疑问题是您对EnsureSuccessStatusCode的调用实际上抛出了异常,其文档中写道:如果内容不为空,此方法还调用Dispose来基本上释放托管和非托管资源,听起来您应该如果你需要失败的内容,就不要用那个方法来判断成功或失败。只需自己检查状态代码并根据该代码适当地使用内容即可。请注意,如果请求完全失败,则响应很容易在catch块中为null。正确的方法是在try块本身内try{...response=awaithttpClient.PostAsync(url,httpContent);netResults=awaitresponse.Content.ReadAsStringAsync();//对结果做一些事情}catch(HttpRequestExceptionex){//在这里捕获任何异常}catch块用于处理异常情况,然后在需要时重新抛出它们,并且应该避免做任何其他事情。仅当远程服务器实际响应时才应提供响应。如果Response为null(我知道这是你的情况),则意味着由于某种原因请求未送达或未收到响应(未收到响应-使用代码200(OK)或任何其他代码(错误))。请检查错误代码(we.Status)。确保它等于WebExceptionStatus.ProtocolError(即服务器响应错误);否则,发生了一些其他错误并且响应不可用。以上就是C#学习教程:HowtogettheJSONerrormessagefromHttpRequestException。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: