HttpWebRequest 不起作用,但 Postman 可以

HttpWebRequest doesn't work, but Postman does

我正在尝试使用下面的代码通过 WebHttpRequest 获取一个 json 字符串(它会尝试调用一个文件,该文件将 return 我的 json 位于应用)。它在我的机器上运行,但是当我部署到用户服务器时,出现错误

"The underlying connection was closed: An unexpected error occurred on a send.".

当我尝试 运行 URL 的 powershell invoke-webrequest 时,我遇到了同样的错误,但奇怪的是,当我使用 Postman(get 或 post)时它工作正常对于 URL,用户服务器内部或外部。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.UseDefaultCredentials = true;
request.PreAuthenticate = true;
request.Credentials = CredentialCache.DefaultCredentials;
request.ContentType = "application/json";

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader reader = new StreamReader(resStream);
String jsonResponse = reader.ReadToEnd();

我也尝试过使用另一种方法 (WebClient) 获取 URL,但效果不佳。

String jsonResponse = null;
using (var webClient = new WebClient())
{
    jsonResponse = webClient.DownloadString(url);
}

我在异常中得到的完整错误:

The remote server returned an error: (401) Unauthorized. System at System.Net.HttpWebRequest.GetResponse()

有人知道吗?

谢谢。

我认为这可能是你的情况"The underlying connection was closed: An unexpected error occurred on a send." With SSL Certificate

看来你需要设置ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

顺便说一下,您的代码中有:

request.UseDefaultCredentials = true; request.PreAuthenticate = true; request.Credentials = CredentialCache.DefaultCredentials;

那么什么是凭证?该网络凭据是否类似于 AD 凭据?是否有访问该服务器的权限?