我有一个具有以下操作合同的 WCF 服务:
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/VerifyKeys.json/{customerKey}/{userKey}")]
[return: MessageParameter(Name = "MyDetail")]
MyDetail VerifyKeys(string customerKey, string userKey);
我的方法是这样的:
public MyDetail VerifyKeys(string customerKey, string userKey)
{
...
return _myDetail;
}
我的要求是这样的:
http://mydomain.com/MyService.svc/web/VerifyKeys.json/FE3D0F1D-5B8B-4677-B332-70B7ABA80A97/08F4349A-30E5-457D-F2BD-70A23CE17F41?deviceId=66345ec6-a5fe-4b5f-8cf2-1b0d8c344dc2&deviceToken=AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d&deviceType=Pink24
我有不同版本的应用程序调用此方法。我没有创建一个新方法,而是在最后使用了一个查询字符串。通过解析url,我可以得到我需要的附加参数。IE。deviceToken、deviceId 和 deviceType
我的请求运行良好,而 deviceToken 参数较小。现在,为我提供设备令牌的公司制造了一个非常庞大的设备令牌。现在我的请求返回错误请求 400。
AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d
如果我从查询字符串的末尾删除这些字符,则请求会成功通过。“Q2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d”
我做了一些研究,发现参数的最大值是 255 个字符。我的设备令牌只有 140。
让我更加困惑的是,如果我更改了 deviceId 和 deviceToken 参数的顺序,那么我必须缩短 deviceId 参数才能成功发送。另一个有趣的地方是,如果我尝试缩短任何其他参数,那么我的请求仍然会失败。我必须总是缩短第二个参数。
有没有其他人遇到过类似的问题并找到了解决方案?
如何通过路径末尾的查询字符串发送我的 looong 设备令牌?