У меня очень простое тестовое приложение, которое создает 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 я пытаюсь вызвать API с помощью POSTMAN и получаю сообщение об ошибке.что есть «Ссылка на объект, не установленная для экземпляра объекта».ошибка в этой строке в try / catch:
var resp = (HttpWebResponse)ex.Response;
Итак, я подключил удаленный отладчик к API и прошел через этот маленький биткода.Что странно для меня, так это то, что я могу видеть прямо, когда программа переходит в часть кода catch
, но нет объекта ex
Exception.Под этим я подразумеваю, что в отладке я могу навести курсор на переменную ex
, и ничего не появляется.Даже зависание над ex.Response
ничего не показывает.Итак, поскольку там ничего нет (т.е. ex
не существует, даже значение null
), приложение бомбит с ошибкой нулевой ссылки.
Я думаю, что, возможно, что-то в Azureблокирует URL, так как я могу запустить это локально без проблем.Я спросил у наших сетевых ребят об этом, и они сказали, что не должно быть никаких ограничений, о которых они знают, чтобы предотвратить выход вызова.Странно то, что я включил ведение журнала диагностики в Azure для этого приложения, и ничего не отображается.Хотя я могу запустить приложение с помощью браузера или PostMan, в журнале ничего не отображается.Итак, это еще одна странная вещь.Я ожидаю, что смогу увидеть что-то .
В любом случае, я надеюсь, что, возможно, кто-то сталкивался с чем-то подобным и может указать мне на статью / решение / блогэто может пролить свет на это и привести меня к рабочему решению.
Спасибо!
РЕДАКТИРОВАТЬ: Добавлен снимок экрана с сообщением об ошибке, как оно отображается в браузере:
РЕДАКТИРОВАТЬ: добавлена строка, в которой приложение выдает исключение ниже:
responseBytes = client.UploadData(baseAddress, "POST", parms);
Сразу после попытки выполнить эту строку, он переходит кcatch
, но WebException, как представляется, отсутствует.
РЕДАКТИРОВАТЬ: Я нашел решение и добавил его в качестве ответа ниже.