为ServicePointManager.SecurityProtocol设置每个请求值
在c#中,我可以为SSL3或TLS设置静态值,例如
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
要么:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
但是(我相信)这将影响我的应用程序中所有未来的HttpWebRequest对象。
有没有办法为给定的HttpWebRequest或至少为给定的URI设置此值?
注意我已经看到了这个:
Uri uri = new Uri(url); ServicePoint sp = ServicePointManager.FindServicePoint(uri);
但ServicePoint没有SecurityProtocol属性。
目前我认为我必须在创建新的HttpWebRequest之前设置静态全局属性。
这感觉不对,这也意味着:
- 我必须确保多个线程不同时执行此操作。
- 我不确定这个设置在什么时候被“使用”(即当我调用webRequest.GetResponse()时,是否访问了ServicePointManager.SecurityProtocol并绑定到该URI?)。
意识到这已经涵盖在这里:
如何在特定的HttpWebRequest中使用SSL3而不是TLS?
和这里:
根据请求在.net HttpWebRequest上设置SecurityProtocol(Ssl3或TLS)
证实了我的恐惧。 一些用户似乎正在启动一个单独的应用程序域来解决此问题。 我仍然认为,如果在设置绑定到特定Web请求对象的哪个位置上已经很好地定义了某些线程锁定,那么它可能是可能的。