You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 3.5升级至4.8后HTTP请求报安全协议不支持问题解决

解决HTTP请求提示“请求的安全协议不受支持”的问题

问题根源

你的应用升级到.NET 4.8后,给所有请求都强制设置了安全协议类型,但HTTP协议本身不需要任何安全协议配置,强行添加反而会触发协议不兼容的错误——这就是为什么HTTPS请求正常,HTTP请求报错的原因。

解决方案

核心逻辑很简单:只在请求是HTTPS协议时,才配置安全协议,HTTP请求直接跳过这一步。调整后的代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        Uri validatedUri = null;
        var result = Uri.TryCreate(_path, UriKind.RelativeOrAbsolute, out validatedUri);
        if (result)
        {
            HelpURL = path;
            // 仅对HTTPS请求配置安全协议
            if(HelpURL.StartsWith("https://"))
            {
                ServicePointManager.SecurityProtocol |= SecurityProtocolType.SystemDefault 
                    | SecurityProtocolType.Ssl3 
                    | SecurityProtocolType.Tls 
                    | SecurityProtocolType.Tls11 
                    | SecurityProtocolType.Tls12 
                    | SecurityProtocolType.Tls13;
            }

            // 后续的请求创建逻辑
            HttpWebRequest req = WebRequest.Create(HelpURL) as HttpWebRequest;
            req.UseDefaultCredentials = true;
            req.PreAuthenticate = true;
            req.Credentials = CredentialCache.DefaultCredentials;
            var statusCode = ((HttpWebResponse)req.GetResponse()).StatusCode;
        }
    }
    catch (Exception ex)
    {
        // 可根据需求添加异常处理逻辑
    }
}

优化建议

如果想让协议判断更严谨(比如避免URL大小写、特殊格式导致的判断失误),可以改用Uri.Scheme来判断:

if (validatedUri != null && validatedUri.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase))
{
    // 配置安全协议
}

内容的提问来源于stack exchange,提问作者Admiral Land

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:17:28