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

时间:2018-11-01 09:09:14

标签: c# json post sap

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

如果我使用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中对其进行了测试。

任何人都曾经遇到过这个问题,并设法弄清了这个问题吗?

2 个答案:

答案 0 :(得分:0)

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

SAP Consume OData Services

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

很高兴刚开始工作,但是一旦开始工作就很扎实。

答案 1 :(得分:0)

在您的请求中添加以下行。

request.ServicePoint.Expect100Continue = false;