我目前正在使用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);
如果有人能指出正确的方向,那真是太棒了。谢谢!
我对类的序列化搞砸了,因为其中包含破折号。一旦我应用了[Newtonsoft.Json.JsonProperty(PropertyName =“ x-token”)]属性,一切都将正常工作。