我正在尝试将REST消息发布到存在证书问题的网站。在我们的IT人员解决该问题之前,我需要在执行
PostAsync
个电话。
由于某些原因,ServerCertificateCustomValidationCallback
不再是HttpClientHandler
的一部分。还有另一种解决方法
这样可以避免权限错误?谢谢。
这是我在做什么的一个例子。
string json = JsonConvert.SerializeObject(new
{
Message = new
{
TestID = "1",
}
});
var spHandler = new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
{
return true;
}
};
System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(spHandler,true);
client.BaseAddress = new System.Uri("https://test.com");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage msg = client.PostAsync(@"/Test", content).Result;
编辑:(修复了'/'分隔符问题)
来自
client.BaseAddress = new System.Uri("https://test.com");
HttpResponseMessage msg = client.PostAsync(@"/Test", content).Result;
收件人
client.BaseAddress = new System.Uri("https://test.com/");
HttpResponseMessage msg = client.PostAsync("Test", content).Result;
答案 0 :(得分:0)
我实际上找到了问题,并编辑了上面的问题。原来,您不能在uri PostAsync查询中使用前导“ /”。这是造成问题的原因。处理程序实际上很好。
答案 1 :(得分:-1)
通过以下步骤,我成功绕过了证书验证:
获取证书
X509Certificate2 clientCert = GetClientCertificate();
创建请求处理程序并通过证书
WebRequestHandler requestHandler = new WebRequestHandler(); requestHandler.ClientCertificates.Add(clientCert);
调用处理程序
System.Net.ServicePointManager.ServerCertificateValidationCallback + = 委托{return true; };
创建传递处理程序的HttpClient对象并调用服务。
HttpClient客户端=新的HttpClient(requestHandler)
我希望这对您有用。