次の操作コントラクトを持つ 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 を解析することで、必要な追加パラメーターを取得できます。すなわち。deviceToken、deviceId、および deviceType
deviceToken パラメータが小さい間、私のリクエストは正常に機能しました。現在、デバイス トークンを提供している会社は、非常に巨大なトークンを作成しています。そして今、私のリクエストは Bad Request 400 を返します。
AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d
これらの文字をクエリ文字列の末尾から削除すると、リクエストは正常に処理されます。"Q2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d"
いくつかの調査を行ったところ、パラメーターの最大文字数は 255 文字であることがわかりました。私のデバイス トークンは 140 しかありません。
さらに混乱を招くのは、deviceId パラメーターと deviceToken パラメーターの順序を変更した場合、正常に送信するには deviceId パラメーターを短くする必要があることです。もう 1 つの興味深い点は、他のパラメーターのいずれかを短縮しようとすると、要求が失敗することです。常に 2 番目のパラメーターを短くする必要があります。
他の誰かが同様の問題を抱えていて、解決策を見つけましたか?
パスの末尾にあるクエリ文字列を介して looong デバイス トークンを送信するにはどうすればよいですか?