Почтовый запрос к API работает для Android, но не для IOS. Ксамарин

Я пытался создать функцию, которая проверяет мой токен, и она работает для Android, но не для IOS. Ответ на IOS от моего пользовательского API возвращает 401 неавторизованный (что и должно быть, когда вы отправляете недопустимый ключ), но я попробовал ключ в почтальоне, и он действителен.

Может быть, это как-то связано с форматированием? Но я не вижу, в чем будет разница между Android и IOS.

Некоторый код:

public async Task<T> PostResponse<T>(string weburl, string jsonstring) where T : class
    {
        var Token = App.TokenDatabase.GetToken();
        string ContentType = "application/json";
        var token = string.Format("Token token = {0}", Token.access_token);
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

        try
        {
            var result = await client.PostAsync(weburl, new StringContent(jsonstring, Encoding.UTF8, ContentType));
            if (result.StatusCode == System.Net.HttpStatusCode.OK)
            {
                var JsonResult = result.Content.ReadAsStringAsync().Result;
                try
                {
                    var ContentResp = JsonConvert.DeserializeObject<T>(JsonResult);
                    return ContentResp;
                }
                catch { return null; }

            }

        }
        catch { return null;  }
        return null;
    }

Я создал несколько журналов на стороне сервера, и когда я запускаю приложение IOS, токен по какой-то причине не передается на сервер.

PHP-код:

$token = null;
$headers = apache_request_headers();
if (isset($headers['Authorization'])){
  $matches = array();
  preg_match('/Token token=(.*)/', $headers['Authorization'], $matches);
  if (isset($matches[1])){
    $token = $matches[1];
  }
} 

file_put_contents('../config/log.txt', $token);

Я проверил, что приложение отправляет токен. Он исчезает где-то по дороге.

Обновлено: После некоторой регистрации я обнаружил, что токен находится в заголовке, но не в заголовке авторизации при отправке через IOS, как вы решаете это?

если вы управляете сервером, вам нужно сравнить запросы с Android и iOS, чтобы определить, в чем разница

Jason 30.06.2019 18:49

Кстати, вы используете http наши HTTPS-запросы?

Bruno Caceiro 30.06.2019 20:14

@BrunoCaceiro https

Bornelu 30.06.2019 21:12

Что вы подразумеваете под токеном в заголовке, но не в заголовке авторизации?

shanranm 01.07.2019 11:06

@shanranm Когда я вызываю $headers = apache_request_headers(); токен есть, но не в $headers['Authorization'], где я ищу.

Bornelu 01.07.2019 11:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
489
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил это, загрузив плагины Flurl и Flurl.Http и добавив эту строку:

 var result = await url.WithOAuthBearerToken(token).PostJsonAsync(jsonstring);

Кредит: Формы Xamarin не отправляют заголовок авторизации

Также

Свободный HTTP

Это просто обходной путь для проблемы, привлечение целого пакета (который в первую очередь не нужен) только для «решения», это не решение. Пожалуйста, попробуйте отладить, почему это происходит. Для вас это тоже перенаправление с косой чертой в конце? если да, можете ли вы добавить косую черту в URL-адресе запроса и попробовать?

shanranm 01.07.2019 12:20

@shanranm Я пробовал с косой чертой в конце, и проблема не устранена.

Bornelu 01.07.2019 12:26

Другие вопросы по теме