RestSharp - 在部署的应用程序中执行 API 时出现 System.Net.WebException

问题描述

我的应用程序部署在 aws 服务器中。

整个过程是这样的:我连接到 2 个 API:一个获取令牌,另一个(使用所述令牌)获取 json 数据,我稍后必须将其转换为 PDF 文件

当我在我的本地主机上运行应用程序时,我不需要使用代理,但是当我部署它时,第二个 API 需要这个代理的一个实例:http://proxy.aws.cnb

我会写一个小图例,以便您了解您将在我的代码中看到的一些变量的值:

  • 代理网址:http://proxy.aws.cnb
  • UseProxyApiPDF:。如果我在本地运行应用程序,则为 False
  • URLPDFs:API 的 URL
  • 接受:application/json

这是第二个 API 连接的代码。如果 Token 成功获取,它就会被执行,这种情况总是如此:

 IRestResponse<Accesstoken> responsetoken = clientToken.Execute<Accesstoken>(requestToken);
if (responsetoken.IsSuccessful)
            {

            Accesstoken formToken = responsetoken.Data;
            string URLPDFs = appsettings.GetValue<string>("ApiMonsanto:PDFs:URL");
            string AuthorizationBear = appsettings.GetValue<string>("ApiMonsanto:PDFs:AuthorizationBear");
            string AuthorizationBasic = appsettings.GetValue<string>("ApiMonsanto:PDFs:AuthorizationBasic");
            string Accept = appsettings.GetValue<string>("ApiMonsanto:PDFs:Accept");
            var clientPDF = new RestClient(URLPDFs);
            if (UseProxyApiPDF)
            {
                clientPDF.Proxy = new WebProxy(ProxyURL,true,new string[] { URLPDFs });
            }
            var requestPDF = new RestRequest(Method.GET);
            requestPDF.AddHeader("Authorization",AuthorizationBasic);
            requestPDF.AddHeader("Authorization",AuthorizationBear + formToken.access_token);
            requestPDF.AddHeader("Accept",Accept);
            IRestResponse responsePDF = clientPDF.Execute(requestPDF);
            if (responsePDF.IsSuccessful)
            {
                Log.information("Conection Successful");
                //Log.information(responsePDF.Content);
                return Ok();

            }
        }

当我在部署了应用程序的情况下运行此代码时,我从 responsePDF 中获得状态代码 0 和下一个错误

连接尝试失败,因为连接方没有 一段时间后正确响应,或建立连接 失败,因为连接的主机未能响应

它触发了一个异常:这是堆栈跟踪:

System.Net.WebException: A connection attempt Failed because the connected party did not properly respond after a period of time,or established connection Failed because connected host has Failed to respond  ---> System.Net.Http.HttpRequestException: A connection attempt Failed because the connected party did not properly respond after a period of time,or established connection Failed because connected host has Failed to respond ---> System.Net.sockets.socketException: A connection attempt Failed because the connected party did not properly respond after a period of time,or established connection Failed because connected host has Failed to respond
   at System.Net.Http.ConnectHelper.ConnectAsync(String host,Int32 port,CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host,CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.httpconnectionPool.CreateConnectionAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.httpconnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.httpconnectionPool.SendWithRetryAsync(HttpRequestMessage request,Boolean doRequestAuth,CancellationToken cancellationToken)
   at System.Net.Http.httpconnectionPool.EstablishProxyTunnel(CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.httpconnectionPool.CreateConnectionAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask,HttpRequestMessage request,CancellationTokenSource cts,Boolean disposeCts)
   at System.Net.HttpWebRequest.SendRequest()
   at System.Net.HttpWebRequest.GetResponse()
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetResponse()
   at RestSharp.Http.<ExecuteRequest>g__GetRawResponse|190_1(WebRequest request)
   at RestSharp.Http.ExecuteRequest(String httpMethod,Action`1 prepareRequest)

究竟是什么导致连接失败?我尝试了没有代理的 API,但 requestPDF 返回 Service Unavailable ,所以我相信我必须使用它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)