使用HttpClient检查Internet连接我很难理解下面的代码如何处理偶尔丢失的Internet连接。理想情况下,我想在连接丢失后暂停应用程序,并在它再次启动时恢复它。是否有关于如何执行此操作的指南?HttpClientHandlerclientHandler=newHttpClientHandler();clientHandler.UseDefaultCredentials=true;HttpClientclient=newHttpClient(clientHandler){MaxResponseContentBufferSize=1000000};HttpResponseMessageresponse=awaitclient.GetAsync(Url,ct);以下示例不是直接解决方案,但它是我构建的一个示例,用于展示如何在离线时将“预先打包”的内容返回到请求,然后在连接恢复时返回在线。如果你能得到我在这里所做的,那么构建你想要的东西应该相当容易。以上就是C#学习教程:用HttpClient查看所有联网分享的内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——【实事】publicasyncTaskGetting_a_response_when_offline(){varofflineHandler=newOfflineHandler(newHttpClientHandler(),newUri("http//橡树:1001/status"));offlineHandler.AddOfflineResponse(newUri("http://oak:1001/ServerNotRunning"),newHttpResponseMessage(HttpStatusCode.NonAuthoritativeInformation){Content=newStringContent("这是我们离线时信息的旧副本。")});varhttpClient=newHttpClient(offlineHandler);var重试=真;while(retry){varresponse=awaithttpClient.GetAsync(newUri("http://oak:1001/ServerNotRunning"));如果(response.StatusCode==HttpStatusCode.OK)retry=false;线程.睡眠(10000);}}publicclassOfflineHandler:DelegatingHandler{privatereadonlyUri_statusMonitorUri;privatereadonlyDictionary_offlineResponses=newDictionary();私人布尔_isOffline=假;私人计时器_timer;publicOfflineHandler(HttpMessageHandlerinnerHandler,UristatusMonitorUri){_statusMonitorUri=statusMonitorUri;InnerHandler=innerHandler;}publicvoidAddOfflineResponse(Uriuri,HttpResponseMessageresponse){_offlineResponses.Add(uri,response);}protectedasyncoverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){if(_isOffline==true)returnOfflineResponse(request);try{varresponse=awaitbase.SendAsync(request,cancellationToken);if(response.StatusCode==HttpStatusCode.ServiceUnavailable||response.StatusCode==HttpStatusCode.BadGateway){MonitorOfflineState();返回离线响应(请求);}返回响应;}catch(WebExceptionex){MonitorOfflineState();返回离线响应(请求);}}privatevoidMonitorOfflineState(){_isOffline=true;_timer=newTimer(asyncstate=>{varrequest=newHttpRequestMessage(){RequestUri=_statusMonitorUri};try{varresponse=awaitbase.SendAsync(request,newCancellationToken());如果(response.StatusCode==HttpStatusCode.OK){_isOffline=false;_timer.Dispose();}}catch{}},null,newTimeSpan(0,0,0),newTimeSpan(0,1,0));}privateHttpResponseMessageOfflineResponse(HttpRequestMessagerequest){if(_offlineResponses.ContainsKey(request.RequestUri)){return_offlineResponses[request.RequestUri];。暂停服务);}}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
