gpt4 book ai didi

c# - 简单的 WebClient 在本地工作,但在部署到 Azure 时无法工作

转载 作者:行者123 更新时间:2023-12-02 23:44:21 25 4
gpt4 key购买 nike

我有一个非常简单的测试应用程序,它创建一个 WebClient 并从第三方 API 获取响应(敏感信息已删除):

using (WebClient client = new WebClient())
{
var baseAddress = new Uri("https://test-url");

client.Headers["Content-Type"] = "application/json";

var parms = Encoding.Default.GetBytes(
"{ \"username\":\"<USERNAME>\"," +
"\"password\":\<PASSWORD>\"," +
"\"client_id\":\"<CLIENT_ID>\"," +
"\"client_secret\":\"<CLIENT_SECRET>\"" +
"}"
);

// Get access token
var responseObject = new ResponseObject();
var responseBytes = new byte[] { };
string responseBody;

try
{
responseBytes = client.UploadData(baseAddress, "POST", parms);
responseBody = Encoding.UTF8.GetString(responseBytes);
responseObject = JsonConvert.DeserializeObject<ResponseObject>(responseBody);
}
catch (WebException ex)
{
var resp = (HttpWebResponse)ex.Response;
Console.WriteLine(resp.StatusDescription);
}
}

当我在本地多次运行该代码时,该代码可以完美运行。我收到回复,并且能够从中提取我需要的信息。

但是,当我将此代码部署到 Azure 后,我尝试使用 POSTMAN 调用 API,但收到一条错误消息,告诉我“对象引用未设置到对象的实例”。 try/catch 中这一行出现错误:

var resp = (HttpWebResponse)ex.Response;

Indication of error-causing line

因此,我将远程调试器附加到 API 并逐步执行这一小段代码。对我来说奇怪的是,当程序跳转到代码的 catch 部分时,我可以看到正确的内容,但没有 ex Exception 对象。我的意思是,我可以将鼠标悬停在调试中的 ex 变量上,但不会出现任何内容。即使将鼠标悬停在 ex.Response 上也没有显示任何内容。因此,由于那里什么都没有(即 ex 似乎不存在,甚至没有 null 值),因此应用程序会因空引用错误而崩溃。

我的想法是,也许 Azure 中的某些内容阻止了 URL,因为我可以在本地运行它而不会出现问题。我向我们的网络人员询问了此事,他们说不应该设置任何他们知道的限制来阻止调用出去。奇怪的是,我在 Azure 中为此应用程序打开了诊断日志记录,但没有显示任何内容。尽管我可以使用浏览器或 PostMan 访问该应用程序,但日志中没有出现任何内容。所以,这又是一件奇怪的事情。我希望能够看到一些东西。

无论如何,我希望也许有人以前遇到过类似的事情,并且可以向我指出一篇文章/解决方案/博客,这些文章/解决方案/博客可能会阐明这个问题并让我找到一个可行的解决方案。

谢谢!

编辑:添加了浏览器中显示的错误消息的屏幕截图:

enter image description here

编辑:添加了应用程序抛出异常的行:

responseBytes = client.UploadData(baseAddress, "POST", parms);

尝试执行此行后,它立即跳转到catch,但似乎没有 WebException。

编辑:我找到了解决方案并将其添加为下面的答案。

最佳答案

我找到了一个有效的解决方案,它只需要一行代码:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

所以,基本上,我只需设置 SecurityProtocol。我不知道如果没有它,它是如何在本地工作的,但显然,在 Azure 上运行它需要对其进行设置。

关于c# - 简单的 WebClient 在本地工作,但在部署到 Azure 时无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54832119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com