c# ServicePointManager 在 .NET Core 中还起作用吗

来源:AI视频音频作者:香港程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《c# ServicePointManager 在 .NET Core 中还起作用吗》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《c# ServicePointManager 在 .NET Core 中还起作用吗》有用,将其分享出去将是对创作者最好的鼓励。

在.NET Framework开发中,ServicePointManager是管理HTTP连接行为的核心类,开发者常通过它设置TLS协议版本、最大连接数、连接超时时间等参数。当项目迁移到.NET Core时,不少开发者会疑惑这个类是否还能继续发挥作用,本文将围绕这个问题展开详细分析。

c# ServicePointManager 在 .NET Core 中还起作用吗

ServicePointManager的基本作用

ServicePointManager位于System.Net命名空间下,主要用来管理ServicePoint对象,每个ServicePoint对应一个到指定服务器的连接端点。在.NET Framework中,它的常见用法如下:

using System;
using System.Net;

class Program
{
    static void Main()
    {
        // 设置TLS 1.2及以上协议
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
        // 设置最大连接数
        ServicePointManager.DefaultConnectionLimit = 100;
        // 忽略证书验证(仅测试环境使用)
        ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
    }
}

ServicePointManager在.NET Core中的生效情况

部分场景仍然生效

在.NET Core中,ServicePointManager并没有被完全移除,针对传统的HttpWebRequest类,它的配置仍然会生效。因为HttpWebRequest在.NET Core中保留了原有的连接管理逻辑,依然依赖ServicePointManager来管理连接池和协议配置。

以下代码在.NET Core中运行后,TLS协议和连接数的设置会生效:

using System;
using System.Net;

class Program
{
    static void Main()
    {
        // 针对HttpWebRequest的配置仍然生效
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        ServicePointManager.DefaultConnectionLimit = 50;
        
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://ipipp.com");
        // 发送请求时,会使用上面设置的TLS 1.2协议,连接数也受DefaultConnectionLimit限制
        var response = request.GetResponse();
        Console.WriteLine("请求成功");
    }
}

对HttpClient不生效

.NET Core中更推荐使用HttpClient来发送HTTP请求,而HttpClient基于全新的HttpClientHandler和SocketsHttpHandler实现,完全不依赖ServicePointManager的配置。即使设置了ServicePointManager的相关属性,也不会影响HttpClient的请求行为。

例如下面的代码,ServicePointManager的TLS设置不会影响HttpClient的请求:

using System;
using System.Net;
using System.Net.Http;

class Program
{
    static void Main()
    {
        // 此设置对HttpClient无效
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        
        // HttpClient使用自己的配置,默认会使用系统支持的最高TLS版本
        var client = new HttpClient();
        // 发送请求时不会强制使用TLS 1.2,而是根据系统配置和Handler的设置决定
        var result = client.GetAsync("https://ipipp.com").Result;
        Console.WriteLine(result.StatusCode);
    }
}

.NET Core中替代ServicePointManager的配置方式

如果需要在.NET Core中配置HttpClient的请求行为,可以通过HttpClientHandler或者SocketsHttpHandler来实现,对应功能如下:

配置项ServicePointManager配置方式.NET Core HttpClient配置方式
TLS协议版本设置SecurityProtocol属性在SocketsHttpHandler中设置SslOptions的EnabledSslProtocols
最大连接数设置DefaultConnectionLimit属性在SocketsHttpHandler中设置MaxConnectionsPerServer
证书验证设置ServerCertificateValidationCallback在HttpClientHandler中设置ServerCertificateCustomValidationCallback

以下是使用SocketsHttpHandler配置HttpClient的示例:

using System;
using System.Net;
using System.Net.Http;
using System.Net.Security;

class Program
{
    static void Main()
    {
        var handler = new SocketsHttpHandler
        {
            // 设置最大连接数
            MaxConnectionsPerServer = 50,
            SslOptions = new SslClientAuthenticationOptions
            {
                // 设置TLS协议版本
                EnabledSslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13
            }
        };
        // 证书验证配置
        handler.SslOptions.RemoteCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) => true;
        
        var client = new HttpClient(handler);
        var result = client.GetAsync("https://ipipp.com").Result;
        Console.WriteLine(result.StatusCode);
    }
}

总结

ServicePointManager在.NET Core中并非完全无用,针对HttpWebRequest的场景它仍然可以正常工作,但对于主流的HttpClient请求,它的配置不会生效。在.NET Core项目开发中,如果使用的是HttpClient,建议通过HttpClientHandlerSocketsHttpHandler来配置请求相关参数,避免依赖ServicePointManager导致配置不生效的问题。如果是维护旧的、使用HttpWebRequest的代码,则可以继续使用ServicePointManager的相关配置。

ServicePointManagerC#NET_CoreHttpClient修改时间:2026-06-13 22:24:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。