CORS, Cross Origin Resource Sharing,跨域资源共享。
ArcGIS API for javascript一直支持CORS,如果你用的 Web服务器支持CORS的话,那就不需要代理来执行跨域请求。
官方:如果 Web 服务器上未启用 CORS,则需要代理来绕过这些资源的安全性。但显然IIS 也可以启用CORS 。
如果服务是使用ArcgGIS Server发布的,则api会自动发送请求以查看是否支持CORS。可以打开自己的server看一下:
http://10.45.204.xx8:6080/arcgis/admin/login,使用用户密码登录,可以看到

如果安装的托管ArcGIS Portal联合的 arcgis server:

设置为所有人(公开)就没有弹登录窗口。私有的话应该也可以通过token来解决: https://blog.csdn.net/qq_40376439/article/details/104260652

但是引用Portal 的webmap(portal的地理信息交互显示,可以包含底图,图层,范围,图例,导航工具缩放平移查地点书签)
但在web场景展示中,前端加载大量的数据,模型数据,超过浏览器限定级别了,要设置代理(请求超过2048字符,一般是用一个多边形作为输入参数的时候一般都容易超过)
在官网里搜proxy pages with the API ,这里https://developers.arcgis.com/javascript/latest/proxies/
据说可以通过配置代理,不使用openssl,不使用token来避免登录,但没有成功:
// esriConfig.request.proxyUrl='/proxy/proxy.ashx' // esriConfig.proxyUrl='https://portal.valu.com/arcgis' // esriConfig.request.forceProxy = true; urlUtils.addProxyRule({ urlPrefix: "https://portal.valu.com/arcgis/sharing/rest", proxyUrl: "/proxy/proxy.ashx" }, { urlPrefix: "https://portal.valu.com/server/rest/services", proxyUrl: "/proxy/proxy.ashx" });
配置赛程
ESRI在 github上有个项目代码,用于代理方式解决跨域问题
proxy目录解压到iis 下,配置映射

如遇到 模块列表中必须要有IsapiModule或cgiModule 类似错误,则在控制面板 -> 程序和功能 -> 打开或关闭Windows功能(这几步可以简化为Win+R运行OptionalFeatures) -> Internet信息服务 -> 万维网服务 -> 应用程序开发功能,把cgi ,asp.net等勾选,安装即可解决。


测试代码:
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no" />
<title>ArcGIS API</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.18/esri/themes/light/main.css">
<script src="https://js.arcgis.com/4.18/"></script>
<script>
require([
"esri/config",
"esri/views/SceneView",
"esri/WebScene",
"esri/webscene/Slide",
"esri/layers/FeatureLayer",
"esri/WebMap",
"esri/views/MapView",
"esri/core/urlUtils"
], function (esriConfig,SceneView, WebScene,Slide, FeatureLayer,WebMap,MapView,urlUtils) {
// esriConfig.request.proxyUrl='/proxy/proxy.ashx'
// esriConfig.proxyUrl='https://portal.valu.com/arcgis'
// esriConfig.request.forceProxy = true;
urlUtils.addProxyRule({
urlPrefix: "https://portal.valu.com/arcgis/sharing/rest",
proxyUrl: "/proxy/proxy.ashx"
},
{
urlPrefix: "https://portal.valu.com/server/rest/services",
proxyUrl: "/proxy/proxy.ashx"
});
//小区面
const commLayer = new FeatureLayer("http://10.45.204.xx8:6080/arcgis/rest/services/base2/MapServer/53",{
mode: FeatureLayer.MODE_SNAPSHOT,
outFields: ["*"]
});
var webmap = new WebMap({
portalItem:{
id:'301f3e422db6465a974xx8a28d94',
portal:"https://portal.valu.com/arcgis"
}
});
var view = new MapView({
container: "viewDiv",
map: webmap
});
// 如果是场景
// var scene=new WebScene({
// portalItem:{
// id:'301f3e422db646xx0ce8a28d94',
// portal:"https://portal.valu.com/arcgis"
// }
// });
// const view = new SceneView({
// map: scene,
// container: "viewDiv",
// });
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
总之,我的代理没有配置成功
浙公网安备 33010602011771号