将HttpWebRequest发送到HTTPS REST服务

时间:2016-02-26 10:35:44

标签: c# json ssl curl

我尝试将JSON请求发送到HTTPS安全的REST服务。客户端解释说REST服务正在使用自签名证书。他还解释说这是一项开发服务,我应该忽略任何证书警告。 (该服务在我们办公室的RaspberryPi上运行)

他向我转发了以下CURL请求,以证明它正在运作:

curl -k -H "Content-Type: application/json" -X POST -d '{"MerchantReference":"[removed]",
     "Command":"Debit", "Amount":5500,"DeviceSerialNumber":"[removed]"}'  https://[removed]

当我与Putty建立联系并运行时,我会收到回复,所以一切都很好。但是当我用C#编写应用程序来执行此操作时,我得到以下异常: "基础连接已关闭:发送时发生意外错误。"内部异常是:"身份验证失败,因为远程方已关闭传输流。"

这是我的C#代码:

var tempRequest = @"{""MerchantReference"":""[removed]"",""Command"":""Debit"",
                                    ""Amount"":5500,""DeviceSerialNumber"":""[removed]""}";

HttpWebRequest webRequest = WebRequest.Create(HttpAddress) as HttpWebRequest;
webRequest.Method = WebRequestMethods.Http.Post;
webRequest.ContentType = "application/json";

byte[] buffer = Encoding.UTF8.GetBytes(tempRequest);
Stream postData = webRequest.GetRequestStream();
postData.Write(buffer, 0, buffer.Length);
postData.Close();

var webResponse = webRequest.GetResponse(); // The exception occurred here

我在应用程序启动时添加了对ServicePointManager.ServerCertificateValidationCallback的回调,只接受任何证书,但执行甚至无法到达该部分。

所以我的问题是如何在C#中复制CURL结果。

非常感谢任何协助。

1 个答案:

答案 0 :(得分:0)

我发现了问题。使用TLS v1.2,我们使用的是.Net 4.0,它只支持TLS V1.0。我们要么升级到.Net 4.5,要么使用不同版本的TLS。