我一直在HttpClient使用C#进行WebApi调用.似乎比较简洁快捷WebClient.但是我在Https打电话时被困住了.
如何制作以下代码才能Https拨打电话?
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://foobar.com/");
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/xml"));
var task = httpClient.PostAsXmlAsync<DeviceRequest>(
"api/SaveData", request);
Run Code Online (Sandbox Code Playgroud)
编辑1: 上面的代码适用于进行http调用.但是,当我将方案更改为https时,它不起作用.这是获得的错误:
底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.
编辑2: 将方案更改为https是:第一步.
如何提供证书和公钥/私钥以及C#请求.
由于我刚刚发现RFC 5425需要使用TLS 1.2,并且.NET还不支持它,我想知道是否有任何实现,可能是开源的TLS 1.2协议,如RFC 5246中所定义.
谢谢.
我有一个应用程序使用HTTPS POST将数据发送到服务器.我使用System.Net.WebClient对象来执行此操作.这是一个发送一些数据的函数:
private byte[] PostNameValuePairs(string uri, NameValueCollection pairs)
{
byte[] response;
String responsestring = "";
using (WebClient client = new WebClient())
{
client.Headers = GetAuthenticationHeader();
string DataSent = GetNameValueCollectionValuesString(pairs);
try
{
response = client.UploadValues(uri, pairs);
responsestring = Encoding.ASCII.GetString(response);
}
catch (Exception e)
{
responsestring = "CONNECTION ERROR: " + e.Message;
return Encoding.ASCII.GetBytes(responsestring);
}
finally
{
_communicationLogger.LogCommunication(uri, client.Headers.ToString(), DataSent, responsestring);
}
}
return response;
}
Run Code Online (Sandbox Code Playgroud)
我们传入一个以https://开头的URI
这已经很长时间了.今天,我们开始收到以下连接错误:"基础连接已关闭:发送时发生意外错误".我们对服务器的所有者进行了一些故障排除,他们最终将其缩小到以下内容.他们对服务器进行了更改以阻止TLS 1.0,并表示我们现在需要使用TLS 1.1或1.2发送数据.
我需要在我的WebClient对象(或我的函数中的其他位置)中设置什么才能使用TLS 1.1或1.2而不是TLS 1.0?
我们正在使用.NET Framework 4.5,如果这有所作为.
我们的ASP.NET 2.0网站通过调用Authorize.Net的API来处理信用卡交易.授权已通知我们,在确定的日期,我们的客户必须使用TLS 1.2协议进行API调用.
Microsoft似乎表明这个10-22-16 KB文章中提供了一个解决方案:https://support.microsoft.com/en-us/help/3154517/support-for-tls-system-default-versions-included -in最.NET框架-2.0-SP2-ON-Windows的Vista的SP2和服务器-2008-SP2
...我们添加了SslProtocolsExtensions枚举,您可以将其用作设置TLS v1.2,TLS v1.1的选项,以及针对.NET Framework 2.0 SP2时ServicePointManager.SecurityProtocol属性的操作系统默认值.
请注意,尽管有本文的标题,但上述引用并未涉及Windows Vista SP2或Windows 2008 SP2操作系统,因为这些操作系统不支持TLS v1.1和1.2.
我已经通过以下步骤实现并测试了我对KB文章中指出的解决方案的理解:
不幸的是,在运行应用程序时,我在上面第3项中显示的代码行上遇到以下错误:
System.NotSupportedException:不支持请求的安全协议.
在这一点上,我很难过.我特别感谢有关如何推进此解决方案的任何见解,但我有兴趣了解您所知道的任何其他方法,以允许来自ASP.NET 2.0应用程序的API调用来使用TLS 1.2.(升级到更新版本的.NET框架是最后的选择.)
在此先感谢您的帮助!