Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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# 无法在dotNet Core中建立SSL连接_C#_Rest_.net Core_Https - Fatal编程技术网

C# 无法在dotNet Core中建立SSL连接

C# 无法在dotNet Core中建立SSL连接,c#,rest,.net-core,https,C#,Rest,.net Core,Https,在我的微服务中,我调用了第三方api https://sms.partname.in/mspProducerM/sendSMS?queryParam 它的工作很好,但有时我得到以下错误 SmsClient ? - Connection refused - System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException (111): Connection re

在我的微服务中,我调用了第三方api

https://sms.partname.in/mspProducerM/sendSMS?queryParam
它的工作很好,但有时我得到以下错误

SmsClient ? - Connection refused - System.Net.Http.HttpRequestException: Connection refused
 ---> System.Net.Sockets.SocketException (111): Connection refused
   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, Int32 port, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
我无法找出根本原因。我应该绕过证书吗? 代码:-

private static HttpClient _HttpClient=new HttpClient();
公共静态异步任务SendAsync(Uri url)
{
尝试
{
字符串结果=string.Empty;
使用(var response=await_httpClient.GetAsync(url.ConfigureAwait(false))
{
if(response!=null&&response.StatusCode==System.Net.HttpStatusCode.OK)
{
结果=wait response.Content.ReadAsStringAsync().configurewait(false);
}
}
返回结果;
}
捕获(例外情况除外)
{
_logger.LogError($”发送sms url链接时出错:{url}),例如;
投掷;
}
}

您可以尝试以下几个小调整:

  • 您应该只创建一次HttpClient。
    根据类的使用方式(初始化
    \u httpClient
    ),情况并非如此
  • 我将更改您的if语句
    if(response!=null&&response.StatusCode==System.Net.HttpStatusCode.OK)
    ,并使用其中一个内置功能。
    使用
    response.issAccessStatusCode
    response.ensureAccessStatusCode()
    。如果状态代码不成功,后者将抛出异常
另一件需要考虑的事情是,HTTP调用有时会失败。发生这种情况的原因有多种:网络超时、速率限制等等
也许您需要实现一些弹性。例如,如果在等待1秒后再次尝试相同的HTTP调用,是否有效?如果是这样的话,您可以使用轻松地实现这一点


但是,我强烈建议您开始使用.NETCore的内置功能。管理HttpClient有时会很棘手。但是.NETCore可以通过使用。您甚至可以使用一些扩展方法来实现。

您可以提供代码吗?当然可以。更新了问题。如果您在浏览器中打开url是否正常?@MarkusMeyer正常,但我们每周都会收到一次此错误。我想如果这种行为是偶发的,这是服务提供商的问题。
private static HttpClient _httpClient = new HttpClient();
        public static async Task<string> SendAsync(Uri url)
        {
            try
            {
                string result = string.Empty;
                using (var response = await _httpClient.GetAsync(url).ConfigureAwait(false))
                {
                    if (response != null && response.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        result = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                    }
                }
                return result;
            }
            catch (Exception ex)
            {
                _logger.LogError($"Error occurred while sending sms urlLink:{url}", ex);
                throw;
            }
        }