在使用websocket时,可以在发送查询字符串时传递标头吗?

问题描述 投票:0回答:1

我目前正在使用WebSocket4Net在xamarin中工作,以连接到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);

如果有人能指出正确的方向,那真是太棒了。谢谢!

c# .net xamarin websocket http-headers
1个回答
0
投票

我对类的序列化搞砸了,因为其中包含破折号。一旦我应用了[Newtonsoft.Json.JsonProperty(PropertyName =“ x-token”)]属性,一切都将正常工作。

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

© www.soinside.com 2019 - 2024. All rights reserved.