很确定这是一个 IIS 配置问题,因为它在我们的本地开发和测试环境中有效,但在生产环境中无效。虽然无法找到配置问题,因此提出了这个问题。
这是有问题的服务方法
[WebInvoke(UriTemplate = "GetSpecificData/{type}/{id}/{categories}", Method = "POST", ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string GetSpecificData(string id, string type, string categories);
例如,我们用这个 url 调用它:
/Services/MapService.svc/GetSpecificData/Office/18.029788,59.332478/0
在生产中,它会立即导致 http 状态 400 和来自服务器的“错误请求”。在本地和我们的测试环境中,它工作得很好。
我们认为问题与 ID 部分有关。如果我们将其更改为几乎任何其他内容,无论差异多么小,它似乎都有效。这里有些例子
不起作用:18.029788,59.332478
作品
- 19.029788,59.332478 作品
- 28.029788,59.332478 作品
- 18.129788,59.332478 作品
- 18.029788,59.432478 作品
- 18.029788,59.asdfasd332478
- 18.asdf029788,59.332478
不起作用:16.163657,60.146846
作品
- 16.263657,60.146846
- 16.363657,60.146846
- 16.463657,60.146846
- 16.563657,60.146846
- 16.663657,60.146846
- 16.163657,60.246846
- 16.363657adsfasdfasdfasdf,60.146846asdfasdfasdfa
在我们寻找答案和缩小范围的过程中,我们得出了一些结论
- HTTP 或 HTTPS 无关紧要
- 没有 ISA 或 FW 导致它
- url 中的奇怪字符(如逗号或点..)不是问题
- 请求的长度不是问题,它可以更长(260个字符)
拜托,拜托,希望有人对这可能是什么有想法。它让我发疯没有弄清楚。显然有办法通过重写服务以获取查询参数或类似的方法来解决问题,但我真的很想了解导致这个问题的原因