HttpWebRequest Post 到 Oracle 服务的连接被强行关闭

HttpWebRequest Post to Oracle Service Connection was forcibly closed

尝试通过 ASP.net C# 使用 Oracle Warehouse Cloud REST API。 API Documentation

当我调用 Rest 服务进行对象查询 API 时,出现 2 个错误:

Oracle 支持将我引导至他们的支持库中的 Doc ID 967964.1,其中指出 SendChunked = true;之前已经解决了这个错误,但是我没有运气添加它,我也觉得它不适合 GET REST 调用。

这是我开始时使用的代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(HTTPsURL);
request.Method = "GET";
request.PreAuthenticate = true;
request.Credentials = cred;
request.ContentType = "application/xml";

using (var response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    var content = reader.ReadToEnd();
    return content;
}

我已经能够从 SOAP UI 和 Postman 得到回复。在这两种情况下,我都需要将 Header Content-Type 设置为 "application/xml",并预先提供授权。

在 SOAP UI 中,我的请求如下所示:

GET {My URL is HERE} HTTP/1.1
Accept-Encoding: gzip,deflate
Authorization: Basic { BASIC KEY }
Content-Type: application/xml
Host: ta3.wms.ocs.oraclecloud.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

当我尝试通过 Fiddler 查看我的 .Net 代码时,我没有看到从 .Net 应用程序传递的内容类型。有什么我想念的吗?还是我确实需要分块传递呼叫?

当 SendChunked = true 时,我得到错误:无法为不写入数据的操作设置 Content-Length 或 Chunked Encoding

当我尝试传递数据时,出现错误:无法发送具有此动词类型的内容正文

我尝试过的一些事情:

也许使用 HttpWebRequest 是不可能的。我应该尝试采用更好的方法吗?

我的最终要求是从此调用中取回数据,然后启动其他 .Net 进程。

这听起来像是 TLS 1.2 问题,尤其是因为它在 Postman 中有效,但在 .Net 中无效。 .Net 的旧版本不会自动使用 TLS 1.2 并尝试使用旧协议进行身份验证并立即被拒绝。

有很多针对此问题的修复程序,可以是服务器上的注册表,也可以是特定于应用程序的修复程序,但您应该首先了解自己在做什么,以免搬起石头砸自己的脚。我建议阅读这篇文章并尝试一些修复。