Warm tip: This article is reproduced from serverfault.com, please click

json-尝试通过 C# 应用程序访问 SAP 服务层时出现 500 错误

(json - 500 Error when trying to access SAP Service Layer through C# Application)

发布于 2018-11-01 09:09:14

我正在编写一个与 SAP B1 服务层交互的 C# 应用程序,我正在尝试通过 HTTP POST 调用登录,主体使用 JSON。

如果我使用 POSTMAN 发送登录请求,它会正常登录并按预期接收会话 cookie。当我通过我的 C# 应用程序发送 JSON 时,我收到一个 500 错误 - 我完全不知道为什么。我有另一种方法可以发送对特定项目的请求,该请求返回 401 - Unauthorized 所以我知道它正在击中服务层。

下面是到目前为止方法中的代码。

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 中对其进行了测试。

任何人之前遇到过这个问题并设法弄清楚如何纠正这个问题?

Questioner
PoweredByDoritos
Viewed
11
PoweredByDoritos 2018-11-06 22:37:18

这是我必须实施的解决方案的链接:

SAP 使用 OData 服务

因此,我没有尝试通过 JSON 访问所有内容,而是必须从此处获取一些代码,这些代码创建一个服务层实例并通过在其中实现的方法登录。

开始工作非常繁琐,但一旦工作,它就非常可靠。