域标签包含非法字符':'

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

我正在使用Sharp.XMPP库为FCM。我可以正常连接,它可以毫无问题地接收上游消息。但是,将ack发送回服务器时会出现错误代码400的响应,其中包含以下详细信息

<JIDMalformed xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" />
<text>"Malformed JID 'XXXXXX:XXXXXXXXXXXXX-XXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXX_XXXXX_XXXXX-XXXXXXXXXXXXXXXXXXX': domain label contains illegal character ':'"</text>

而Xs取代了从中接收上游消息的设备注册令牌。我用来形成消息并发送的代码:

Sharp.Xmpp.Im.Message x = new Sharp.Xmpp.Im.Message(vFrom);
x.Data.SetAttribute("message_id", vMessageID);
x.Data.SetAttribute("message_type", "ack");
cl.SendMessage(x);

字符串vFrom包含device_token。我无法取代:,因为它是设备令牌的重要组成部分,\:也没有逃脱它。在XML格式中使用冒号的正确方法是什么?

c# xml sharp.xmpp
1个回答
1
投票

这里的问题是你已经将属性添加到<data>标签,因此它们应该是<gcm>的元素

var msg = Xml.Element("message");
var elem = Xml.Element("gcm" ,"google:mobile:data"); //the gcm tag with xmlns attribute
Xml.Child(msg, elem); //assign child to message tag
var data = new {to = vFrom; message_id = vMessageID, message_type = "ack"};
JavaScriptSerializer serializer = new JavaScriptSerializer();
elem.Text(serializer.Serialize(data)); //not adding attributes
cl.SendMessage(new Sharp.Xmpp.Im.Message(new Sharp.Xmpp.Core.Message(data: elem)));

这个here是针对FCM的Sharp.XMPP的改进版本。它包括可能没有提交给github的类Sharp.Xmpp.Core.MessageThis可能有助于澄清。

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