解决ArcGIS API for Silverlight 加载地图的内外网访问问题

时间:2021-05-30 10:14:26

原文:解决ArcGIS API for Silverlight 加载地图的内外网访问问题

先上一个类,如下:

public class BaseClass
{
public static string getFullUri(string oldUriString)
{
string newUriString = oldUriString;
//处理相对地址============================================================
if (newUriString[0] == '/')
{
string shost = System.Windows.Browser.HtmlPage.Document.DocumentUri.Host;
int sport = System.Windows.Browser.HtmlPage.Document.DocumentUri.Port;
newUriString = "http://" + shost + (sport == 80 ? "" : ":" + sport.ToString()) + newUriString;
} if (!newUriString.StartsWith("http"))
{
string shost = System.Windows.Browser.HtmlPage.Document.DocumentUri.Host;
int sport = System.Windows.Browser.HtmlPage.Document.DocumentUri.Port;
string slocal = System.Windows.Browser.HtmlPage.Document.DocumentUri.LocalPath;
slocal = slocal.Substring(0, slocal.LastIndexOf('/'));
Uri turi = new Uri("http://" + shost + (sport == 80 ? "" : ":" + sport.ToString()) + slocal + "/" + newUriString, UriKind.Absolute);
newUriString = turi.ToString();
}
return newUriString;
}
} <esri:Map>
<esri:Map.Layers>
<esri:ArcGISTiledMapServiceLayer ID="BaseLayer" Url="/arcgis/rest/services/HSDQ/MapServer/"/>
</esri:Map.Layers>
</esri:Map> public MainPage()
{
InitializeComponent();
ArcGISTiledMapServiceLayer layer = myMap.Layers["BaseLayer"] as ArcGISTiledMapServiceLayer;
layer.Url = BaseClass.getFullUri(layer.Url);
}

这样就可以解决内网IP地址访问和外网IP地址同样访问的问题。