我有一个旧的 .Net 4.0 WinForms 应用程序(在 VB 中),它现在需要从 Web API 获取一些数据。Web API 是用 .Net Core 3.1 编写的,托管在 Azure App Service 上。
我最初尝试使用 HttpClient,但遇到了一些奇怪的错误,我认为这是因为 HttpClient 确实适用于 .Net 4.5 及更高版本。所以我现在尝试使用 WebClient 以及 WebRequest,但都给了我这个错误:
“底层连接已关闭:发送时发生意外错误。” “无法从传输连接读取数据:现有连接被远程主机强行关闭。”
这是我的代码:
Dim uri As String = $"{apiUrl}/AzureStorage/Sas?section={section}&recordId={recordId}&filename={filename}"
Using client As New WebClient()
client.Headers.Add("clientId", clientId.ToString())
Dim response As String = client.DownloadString(uri)
End Using
我意识到我在 API 上启用了 CORS,因此对于那个特定的控制器,我通过在控制器顶部添加 [DisableCors] 装饰器来禁用 CORS,但这并没有什么区别。Azure App Service 中也禁用了 CORS,因此我认为这不是 CORS 问题。
从 Angular 8 应用程序调用相同的 API 端点没有问题。当我从邮递员那里调用它时,它甚至可以工作。但是当我从 VB 应用程序调用时,我得到了异常。
响应应该是这个 JSON 对象:
{
"filename": null,
"sasUri": "https://propworx.blob.core.windows.net/devtest/sent_items/1/Repair Report (2).pdf?sv=2019-02-02&sr=b&sig=mO1nfJOc86aug9kESHciPs%2F1H04%2FNw7vdTiGYab3XJg%3D&se=2020-01-25T06%3A32%3A39Z&sp=rcw",
"blobUri": "https://propworx.blob.core.windows.net/devtest/sent_items/1/Repair Report.pdf",
"container": "devtest",
"storageServicesVersion": "2019-02-02",
"startTime": null,
"expiryTime": "2020-01-25T06%3A03%3A08Z",
"resource": "b",
"permissions": "rcw",
"ipRange": null,
"protocol": null,
"signature": "5CYUJ4oHMexx19EOnooyrwpeKrbJyyDGLVMf5Sl5V1s%3D",
"token": "sv=2019-02-02&sr=b&sig=5CYUJ4oHMexx19EOnooyrwpeKrbJyyDGLVMf5Sl5V1s%3D&se=2020-01-25T06%3A03%3A08Z&sp=rcw",
"storageResource": null
}
这是 Postman 发出请求的屏幕截图:
有任何想法吗?
编辑:
好的,如果我在我的 PC 上本地运行 Web API(即我在 Visual Studio 中加载解决方案并点击开始按钮),那么 VB 应用程序可以连接到它并且一切正常(使用http://localhost:50504 /而不是https://propworx-api-san.azurewebsites.net)。所以我认为由于某种原因,VB 应用程序在 Azure 上时无法调用 API(但很有趣,邮递员,也在我的 PC 上运行,可以)