C# WCF HTTP GET参数导致错误请求

C# WCF HTTP GET参数导致错误请求,c#,wcf,C#,Wcf,我有一项WCF服务,其运营合同如下: [OperationContract] [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/VerifyKeys.json/{customerKey}/{userKey}")] [return: Mes

我有一项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
我的要求如下:

    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参数较小。现在,为我提供设备代币的公司已经做了一个非常大的代币。现在我的请求返回错误的请求400

    AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d
如果从查询字符串的末尾删除这些字符,则请求将成功通过。“Q2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d”

我做了一些研究,发现参数的最大值是255个字符。我的设备令牌只有140

让我更加困惑的是,如果我更改了deviceId和deviceToken参数的顺序,那么我必须缩短deviceId参数才能成功发送。另一个有趣的问题是,如果我试图缩短任何其他参数,那么我的请求仍然失败。我必须总是缩短第二个参数

有没有其他人遇到过类似的问题并找到了解决方案


如何通过路径末尾的查询字符串发送looong设备令牌?

可能是查询字符串本身的长度,而不是参数

尝试添加

<httpRuntime maxQueryStringLength="2500" 
maxUrlLength="2500" maxRequestLength="2500" />


转到您的配置,查看错误是否仍然存在

我在发布此问题后找到了解决方案。通常情况就是这样

设备令牌被保存到一个名为NVARCHAR(100)的字段中。以前这已经足够了。设备令牌现在至少可以是140个字符。我将字段改为NVARCHAR(255)。问题已经解决了。再也没有坏的请求了

    AgTGERCBaS3d8n2QWxF9EtwcLktIoygoXpc8Y42ObZWja3RSjN%2bFBeshaY4ASainj3MusBbVopXbUFQrrgXUOSkAbOA7tChNKOFNKQ2gB8sEfCe5Du9BZufW4bAP5312MKRqV8g%3d