c# - 尝试通过 C# 应用程序访问 SAP 服务层时出现 500 错误
问题描述
我正在编写一个与 SAP B1 服务层交互的 C# 应用程序,我正在尝试通过 HTTP POST 调用登录,使用 JSON 作为正文。
如果我使用 POSTMAN 发送登录请求,它会很好地记录我,并且我会按预期收到会话 cookie。当我通过我的 C# 应用程序发送 JSON 时,我收到 500 错误 - 我完全不知道为什么。我有另一种方法发送对特定项目的请求,该请求返回 401 - 未经授权,所以我知道它正在访问服务层。
以下是到目前为止该方法中的代码。
var request = (HttpWebRequest)WebRequest.Create("https://172.16.101.38:50000/b1s/v1/Login");
request.ContentType = "application/json";
request.Method = "POST";
request.ServerCertificateValidationCallback = AcceptAllCertifications;
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string json = new JavaScriptSerializer().Serialize(new
{
UserName = "user",
Password = "pass",
CompanyDB = "db"
});
streamWriter.Write(json);
}
var response = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
而“AcceptAllCertifications”方法如下:
public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification,
System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}
如果我不包含此方法,则会收到“无法为 SSL/TLS 安全通道建立信任关系...”错误。在 POSTMAN 中,我必须确保“SSL 证书验证”处于关闭状态,以便我可以访问服务层。
我知道生成的 JSON 是有效的,因为我在 POSTMAN 中对其进行了测试。
以前有人遇到过这个问题并设法弄清楚如何纠正这个问题吗?
解决方案
在您的请求中添加以下行。
request.ServicePoint.Expect100Continue = false;
推荐阅读
- arrays - 在 Swift 中创建数组
- reactjs - 使用 React 从 Firebase 加载数据
- android - 微调器模式下的Android DatePicker不显示日期
- android - 我可以在不同的时间段内滑动 android viewpager 吗?
- mysql - 使用 SQL 查询移动特定的用户列表
- hibernate - 使用错误数量或类型的参数调用函数 RTRIM/LTRIM
- mysql - mysql查询周期数据到每个月
- lua - 计算相对于lua中对象的位置和旋转的世界坐标
- javascript - 使用 javascript 隐藏和取消隐藏 div 元素
- cs-cart - cscart - 在类别和产品详细信息页面上显示产品时间戳