UWP и HttpClient Digest аутентификация / привязка изображений - PullRequest
0 голосов
/ 30 марта 2019

Я работаю над проектом UWP, где информация собирается через веб-сервис на основе REST / JSON с удаленного устройства.Подключение к этому устройству осуществляется через WiFi и работает на встроенном веб-сервере.Он поддерживает неаутентифицированные запросы, которые работают нормально, и дайджест-аутентификацию, которая доставляет мне проблемы.


Начальная проверка соединения выполняется с помощью этого минимального кода:

    var credentials = new NetworkCredential(settings.CameraUsername, settings.CameraPassword);

    public async Task<bool> VerifyConnection()
    {
        try
        {
            string endpoint = string.Format(ccapiEndpoint, settings.CameraIP, settings.CameraPort);

            using (HttpClient c = new HttpClient(new HttpClientHandler() { Credentials = credentials }))
            {
                var r = await c.GetAsync(endpoint);

                r.EnsureSuccessStatusCode(); // debugging breakpoint
                var response = await r.Content.ReadAsStringAsync();
                var data = JsonConvert.DeserializeObject<ApiInfo>(response);
                return await UpdateCameraInformationAsync();
            }
        }
        catch (HttpRequestException)
        {
            return false;
        }
    }

Тем не менее, соединение вызывает у меня некоторые проблемы, и я не уверен, возникают ли они из-за моего минимального понимания системы дайджеста или из-за неправильного использования API

  1. Начальное соединение работаетхорошо, если веб-сервер запущен новый.Я вижу в Fiddler, что после начального 401 выполняется запрос с учетными данными, а затем следует 200 .Я выполняю запрос в других методах , где учетные данные не устанавливаются вручную и используется только HttpClient c = new HttpClient().Эти запросы успешны и отправляют соответствующий заголовок дайджеста.Итак, мой вопрос номер один: Как / Где хранится эта дайджест-информация, чтобы новые экземпляры HttpClient «знали», какую информацию отправлять ?
  2. Я загружаю кучу изображений изустройство через привязанные к данным URL.Эти изображения - частично - работают нормально.Я вижу в fiddler, что приложение отправляет соответствующие заголовки.Через некоторое время несколько изображений отправляются с неправильным nc в их дайджест-информации.(Я подозреваю, что проблема синхронизации - причина), которая заставляет изображения (и все запросы после этого) терпеть неудачу с 401. Это поднимает два вопроса:
    • a) Каков подходящий способ обработать переподключение в этомдело?Нужно ли отправлять аутентификационную информацию еще раз?
    • b) где должно обрабатываться это исключение?Так как это поднято привязкой данных, я не уверен, где это поймать.AppDomain.UnhandledException - это то, где отладчик явно ломается, но я думаю, что обработка этого в модели представления могла бы быть более уместной.
    • c) возможно ли заставить загрузку изображений быть последовательной?Подход, который мне пришел в голову, состоял в том, чтобы написать «кэширующий» сервис, который последовательно загружает изображения, сохраняет их локально и возвращает локальный файл.Этот подход не может быть тривиальным из-за проблем с синхронизацией, я подозреваю ...
...