Можно ли при работе с веб-сокетами передавать заголовок при отправке строки запроса? - PullRequest
0 голосов
/ 28 октября 2019

Я сейчас работаю в xamarin, используя WebSocket4Net для подключения к серверу GraphQL. Сейчас я пытаюсь отправить строку запроса через сокет, но получаю сообщение об ошибке, в котором говорится, что «не аутентифицирован как пользователь». Я получаю это, потому что я должен передать токен в заголовок, однако, я еще не делаю это правильно.

Я попытался добавить пользовательский заголовок при первом подключении, но это, похоже, не имело значения. Есть ли способ установить заголовок при отправке строки запроса?

У меня это работает на моей игровой площадке GraphQL, но у меня его пока нет в моем коде. GraphQL Playground, right side is success data

Вот как я инициализировал сокет, и вы можете видеть, что я пытался добавить сюда пользовательский заголовок, но это ничего не изменило.

public void Init(string Uri)
        {
            //Initialize the socket
            try
            {
                var cookies = new List<KeyValuePair<string, string>>();
                var extension = new List<KeyValuePair<string, string>>();
                extension.Add(new KeyValuePair<string, string>("x-token", AuthenticationAPI.CurrentToken.ToString()));
                sock = new WebSocket(Uri, "graphql-ws", customHeaderItems:extension);
                sock.Opened += (sender, data) => { OnConnect(data); };
                sock.MessageReceived += (sender, data) => { OnMessage(data); };
                sock.Closed += (sender, data) => { OnDisconnect(data); };
            }
            catch (Exception ex)
            {
                //Init failed 
                sock = null;
                isConnected = false;
            }
        }

И затем я пытаюсь отправить здесь строку запроса, но получаю сообщение об ошибке «Не аутентифицирован как пользователь»

var variables = new Variables();
string entryDate = string.Format("{0:yyyy-MM-dd}", i.ActionDateTime);
var query = "mutation {logAction(episodeId: " + i.EpisodeId + ", listen: " + listenedTo + ") {episodeId listen position favorite entryDate}}"; //  + ", position: " + i.PlayerTime + ", favorite: " + i.Favorite.ToString().ToLower()
var payload = new WebSocketHelper.Payload(query, variables);
var JsonIn = JsonConvert.SerializeObject(new WebSocketCommunication("start", payload));

DabSyncService.Instance.Send(JsonIn);

Я пытался запустить это в течение неделиили теперь, если кто-нибудь может указать мне правильное направление, это было бы здорово. Спасибо!

1 Ответ

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

Моя сериализация классов была испорчена, так как в ней была тире. Как только я применил атрибут [Newtonsoft.Json.JsonProperty (PropertyName = "x-token")], все заработало нормально.

https://code -examples.net / en / q / e11d59

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...