У меня есть старое приложение WinForms. Net 4.0 (в VB), которое теперь требует, чтобы оно получало некоторые данные из веб-API. Веб-API написан на. Net Core 3.1 и размещен на Azure Службе приложений.
Сначала я пытался использовать 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
Я понял, что у меня есть CORS включен в API, поэтому для этого конкретного контроллера я отключил CORS, добавив декоратор [DisableCors] в верхнюю часть контроллера, но это не имеет значения. CORS также отключен в Azure службе приложений, поэтому я не думаю, что это проблема CORS.
Эта та же самая конечная точка API вызывается из Angular 8 приложения без проблем. Это даже работает, когда я звоню из Почтальона. Но я получаю упомянутое исключение при вызове из приложения 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
}
Вот скриншот Почтальона, делающего запрос:
Любые идеи?
РЕДАКТИРОВАТЬ:
Хорошо, если я запускаю веб-API локально на моем P C (т.е. я загружаю решение в Visual Studio и нажимаю кнопку «Пуск»), затем приложение VB может подключиться к нему, и все работает (используя http://localhost: 50504 / вместо https://propworx-api-san.azurewebsites.net). Поэтому я думаю, что по какой-то причине приложение VB не может вызывать API, когда оно работает на Azure (но, как ни странно, почтальон, также работающий на моем P C, может)