自从升级到ArcGIS Server 10.5以来,我们在一些旧的(Flex)网站访问我们的REST服务时遇到了一些问题。当一个地图请求涉及到通过layerDefinitions过滤一个图层时,地图不会绘制出来,我们会得到这个错误:
{"错误":{“代码”:400年,“消息”:“无效的layerDefs指定”,“细节”:[]}}
我们确定这是因为10.5现在要求layerdef以JSON格式表示,而不是简单语法。例如,一个站点可能会发出这样的请求:
这是行不通的。要正确工作,它必须看起来像这样:
据我所知,没有办法改变Flex API在请求中格式化LayerDefs参数的方式。由于ESRI不再支持Flex,我不希望看到Flex API有任何更新来处理这个问题。
我想知道是否有一种方法可以让我们的服务器重写传入请求,以将layerdef从简单语法更改为JSON?我试过在IIS中使用URL重写-甚至在全局级别-但我仍然得到
{"错误":{“代码”:400年,“消息”:“无效的layerDefs指定”,“细节”:[]}}
因此重写不会影响REST服务请求。也许REST服务有自己的重定向,可以绕过我的URL重写规则?
对此有什么想法吗?
解决了!进入解决方案。
嗨,吉姆。
看看这条线:
imageparameters。layerDefs不能在10.5中使用
它也不能与js api一起工作,这是支持的api。
我不知道flex,但可能有可能在flex中重现js的工作方式。
另一种选择是调整esri的资源代理以动态更改layerdefs参数,否则IIS将进行重写。
祝你好运。
嗨,吉姆。
看看这条线:
imageparameters。layerDefs不能在10.5中使用
它也不能与js api一起工作,这是支持的api。
我不知道flex,但可能有可能在flex中重现js的工作方式。
另一种选择是调整esri的资源代理以动态更改layerdefs参数,否则IIS将进行重写。
祝你好运。
谢谢你,杜阿尔特。我以前见过这个帖子。不幸的是,在Flex中ArcGISDynamicMapServiceLayer类似乎没有等同于_params,所以我找不到一种方法来拦截请求参数来修改它。
但是,我确实研究了您关于使用和修改ESRI代理页面的替代建议,并最终取得了成功。我不得不深入研究代理。并在ProcessRequest方法中添加一些代码。使用修改后的代理页面,使用旧格式的所有REST服务请求现在似乎都正确地转换为JSONP格式了。
谢谢你的建议!如果有人感兴趣,我可以张贴我的代码。