在使用 websockets 时,我可以在发送查询字符串时传入标头吗?
Posted
技术标签:
【中文标题】在使用 websockets 时,我可以在发送查询字符串时传入标头吗?【英文标题】:While working with websockets can I pass in a header when sending a query string? 【发布时间】:2019-10-28 15:33:35 【问题描述】:我目前正在使用 WebSocket4Net 在 xamarin 中工作以连接到 GraphQL 服务器。现在我试图通过套接字发送一个查询字符串,但我收到一条错误消息,说没有“作为用户身份验证”。我得到这个是因为我必须将一个令牌传递到标题中,但是我还没有正确地做到这一点。
我尝试在第一次建立连接时添加自定义标头,但这似乎没有什么不同。发送查询字符串时有没有办法设置标题?
我已经在我的 GraphQL 操场上运行它,但我的代码中还没有正确使用它。
这就是我初始化套接字的方式,您可以看到我尝试在此处添加自定义标头,但这并没有什么不同。
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);
我已经尝试了一周左右的时间,如果有人能指出我正确的方向,那就太棒了。谢谢!
【问题讨论】:
您使用 Websockets 来查询我认为的 GraphQL API 是否有特定原因? 我们想要即时通讯。这不是我的决定。 但是你使用的api是否完全支持它?看起来您在场景中遇到了类似 HTTP 的错误 我相信是这样,但我可以仔细检查一下。 我的类序列化被搞砸了,因为它有一个破折号。一旦我应用了属性 [Newtonsoft.Json.JsonProperty(PropertyName = "x-token")] 一切正常。不过我可能会删除这个问题,因为这只是一个愚蠢的错误。 【参考方案1】:我的类序列化被搞砸了,因为它有一个破折号。一旦我应用了属性 [Newtonsoft.Json.JsonProperty(PropertyName = "x-token")] 一切正常。
https://code-examples.net/en/q/e11d59
【讨论】:
以上是关于在使用 websockets 时,我可以在发送查询字符串时传入标头吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 Python FastAPI 中使用 websocket 并行发送/接收