App Center push работает в Postman, но не в моем приложении C # - PullRequest
0 голосов
/ 15 октября 2019

В моем приложении на C # есть служба, которая использует API-интерфейс App Center для отправки уведомлений. Все мои запросы возвращаются с 401 (неавторизованным) еще, когда я использовал те же самые данные о почтальоне, т.е. содержимое , аутентификация заголовка , имя_хозяина и app_name он успешно работает и отправляет приложение.

Это очень сбивает с толку, и мне интересно, обрабатывает ли Почтальон какие-то дополнительные биты и кусочки, которые мне не хватает.

C # Push Notification Service

private async Task<bool> PostHttpRequest(PushNotificationModel pushNotificationModel)
{
    _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("X-API-Token", _appCenterApiToken);
    var url = "https://api.appcenter.ms/v0.1/apps/myowner/myapp/push/notifications";
    var content = JsonConvert.SerializeObject(pushNotificationModel);
    var buffer = Encoding.UTF8.GetBytes(content);
    var byteContent = new ByteArrayContent(buffer);
    byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    var response = await _httpClient.PostAsync(url, byteContent);
    return response.IsSuccessStatusCode;
}

Я отлаживал этот код и использовал те же данные, которые передаются клиенту для использования в Postman, поэтому, например, данные Model отсутствуют.

Помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Я выяснил проблему с помощью Telerik Fiddler. Этот полезный инструмент позволяет вам активно просматривать HTTP-трафик с вашего компьютера. Теперь ошибка была глупой с моей стороны, но она сводилась к тому, чтобы изменить это:

_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("X-API-Token", _appCenterApiToken);

на:

_httpClient.DefaultRequestHeaders.Add("X-API-Token", _appCenterApiToken);

Поскольку первый из них фактически отображался в заголовке HTTP как Authorization : X-API-Token apiToken, а не X-API-Token : apiToken, это приводило к тому, что запрос был плохим, поэтому возвращался 401 (Unauthorised)

0 голосов
/ 15 октября 2019

Введите приведенный ниже код в форму запуска.

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
...