Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
使用来自ASP.net的http请求从Facebook关闭连接_Asp.net_Asp.net Core - Fatal编程技术网

使用来自ASP.net的http请求从Facebook关闭连接

使用来自ASP.net的http请求从Facebook关闭连接,asp.net,asp.net-core,Asp.net,Asp.net Core,我试图通过ASP.net核心应用程序访问Facebook rest api,但每次都会出现异常,因为远程主机关闭了连接。我尝试了四十种不同的解决方案,我在类似的问题中找到了它们,但没有一种有效。我将安全协议更改为TLS1.2,但仍然遇到相同的问题;我还尝试使用web客户端而不是http客户端。然后我想它可能是我办公室的代理,但cUrl工作得很好;使用postman我没有得到任何错误(即使tsl设置为1.0)。 另一个尝试是尝试更改保持活动的持续时间以避免超时。 以下是HttpClient的代码:

我试图通过ASP.net核心应用程序访问Facebook rest api,但每次都会出现异常,因为远程主机关闭了连接。我尝试了四十种不同的解决方案,我在类似的问题中找到了它们,但没有一种有效。我将安全协议更改为TLS1.2,但仍然遇到相同的问题;我还尝试使用web客户端而不是http客户端。然后我想它可能是我办公室的代理,但cUrl工作得很好;使用postman我没有得到任何错误(即使tsl设置为1.0)。 另一个尝试是尝试更改保持活动的持续时间以避免超时。 以下是HttpClient的代码:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
using (var httpClient = new HttpClient()){
  httpClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
  httpClient.DefaultRequestHeaders.Add("Keep-Alive", "3600");
  var request = new HttpRequestMessage(HttpMethod.Get,
            "https://graph.facebook.com/v10.0/me?fields=id%2Cemail%2Cfirst_name%2Clast_name&access_token=" + socialLoginModel.accessToken);
  request.Headers.Add("Accept", "application/json");
  request.Headers.Add("User-Agent", "BriQ");
  var response = await httpClient.SendAsync(request);
}
以下是WebClient的代码:

using(var wb = new WebClient()){
  var response = wb.DownloadString("https://graph.facebook.com/v10.0/me?fields=id%2Cemail%2Cfirst_name%2Clast_name&access_token=" + socialLoginModel.accessToken);
}

我完全没有主意了。可能是一些非常愚蠢的事情导致了异常,但我无法单独找出它

我不确定您到底遇到了哪个异常

但据我所知,如果您使用的是.NET Core,而问题是由SSL/TLS握手失败错误引起的,那么,不幸的是,设置ServicePointManager可能无法工作

因为ServicePointManager只影响HttpWebRequest,HttpWebRequest是.NET Framework上HttpClient的默认实现。从.NETCore2.1开始,SocketShtpHandler提供了HttpClient使用的实现

因此,我认为解决此问题的方法是处理SocketsHttpHandler:

using (var handler = new SocketsHttpHandler())
{
    handler.SslOptions = new SslClientAuthenticationOptions{EnabledSslProtocols = SslProtocols.Tls12};
    using (var httpClient = new HttpClient(handler))
    {
    // your code
    }
}
或者,如果您更喜欢HttpClientHandler,可以通过以下方式:

using (var handler = new HttpClientHandler())
{
    httpClientHandler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
    using (var httpClient = new HttpClient(handler))
    {
    // your code
    }
}
参考文献:


我不确定您到底遇到了哪种例外情况

但据我所知,如果您使用的是.NET Core,而问题是由SSL/TLS握手失败错误引起的,那么,不幸的是,设置ServicePointManager可能无法工作

因为ServicePointManager只影响HttpWebRequest,HttpWebRequest是.NET Framework上HttpClient的默认实现。从.NETCore2.1开始,SocketShtpHandler提供了HttpClient使用的实现

因此,我认为解决此问题的方法是处理SocketsHttpHandler:

using (var handler = new SocketsHttpHandler())
{
    handler.SslOptions = new SslClientAuthenticationOptions{EnabledSslProtocols = SslProtocols.Tls12};
    using (var httpClient = new HttpClient(handler))
    {
    // your code
    }
}
或者,如果您更喜欢HttpClientHandler,可以通过以下方式:

using (var handler = new HttpClientHandler())
{
    httpClientHandler.SslProtocols = System.Security.Authentication.SslProtocols.Tls12;
    using (var httpClient = new HttpClient(handler))
    {
    // your code
    }
}
参考文献:


它真的起作用了,谢谢它真的起作用了,谢谢