layerDefs问题

2858
2
跳到解决方案
02-10-2017 03:54
JimNoel
通过
新贡献者III

自从升级到ArcGIS Server 10.5以来,我们在一些旧的(Flex)网站访问我们的REST服务时遇到了一些问题。当一个地图请求涉及到通过layerDefinitions过滤一个图层时,地图不会绘制出来,我们会得到这个错误:

{"错误":{“代码”:400年,“消息”:“无效的layerDefs指定”,“细节”:[]}}

我们确定这是因为10.5现在要求layerdef以JSON格式表示,而不是简单语法。例如,一个站点可能会发出这样的请求:

https://alaskafisheries.noaa.gov/arcgis/rest/services/ShoreZoneFlexMapService/MapServer/export?size=..。

这是行不通的。要正确工作,它必须看起来像这样:

https://alaskafisheries.noaa.gov/arcgis/rest/services/ShoreZoneFlexMapService/MapServer/export?size=..。

据我所知,没有办法改变Flex API在请求中格式化LayerDefs参数的方式。由于ESRI不再支持Flex,我不希望看到Flex API有任何更新来处理这个问题。

我想知道是否有一种方法可以让我们的服务器重写传入请求,以将layerdef从简单语法更改为JSON?我试过在IIS中使用URL重写-甚至在全局级别-但我仍然得到

{"错误":{“代码”:400年,“消息”:“无效的layerDefs指定”,“细节”:[]}}

因此重写不会影响REST服务请求。也许REST服务有自己的重定向,可以绕过我的URL重写规则?

对此有什么想法吗?

标签(3)
0荣誉
1解决方案

接受的解决方案
DuarteCarreira
临时贡献者II

嗨,吉姆。

看看这条线:

imageparameters。layerDefs不能在10.5中使用

它也不能与js api一起工作,这是支持的api。

我不知道flex,但可能有可能在flex中重现js的工作方式。

另一种选择是调整esri的资源代理以动态更改layerdefs参数,否则IIS将进行重写。

祝你好运。

在原帖子中查看解决方案

2回答
DuarteCarreira
临时贡献者II

嗨,吉姆。

看看这条线:

imageparameters。layerDefs不能在10.5中使用

它也不能与js api一起工作,这是支持的api。

我不知道flex,但可能有可能在flex中重现js的工作方式。

另一种选择是调整esri的资源代理以动态更改layerdefs参数,否则IIS将进行重写。

祝你好运。

JimNoel
通过
新贡献者III

谢谢你,杜阿尔特。我以前见过这个帖子。不幸的是,在Flex中ArcGISDynamicMapServiceLayer类似乎没有等同于_params,所以我找不到一种方法来拦截请求参数来修改它。

但是,我确实研究了您关于使用和修改ESRI代理页面的替代建议,并最终取得了成功。我不得不深入研究代理。并在ProcessRequest方法中添加一些代码。使用修改后的代理页面,使用旧格式的所有REST服务请求现在似乎都正确地转换为JSONP格式了。

谢谢你的建议!如果有人感兴趣,我可以张贴我的代码。

0荣誉