.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
相关产品推荐
相关产品推荐

