Asp.net mvc 在asp.net mvc中跨域打开kmz文件

Asp.net mvc 在asp.net mvc中跨域打开kmz文件,asp.net-mvc,google-earth,kmz,Asp.net Mvc,Google Earth,Kmz,我在通过google earth api打开kmz文件时遇到问题。当我在服务器上提供指向文件的静态链接时,它可以正常工作: google.earth.fetchKml(ge, 'http://10.122.150.183:8008/test.kmz', checkForCoordinates); 但当我更改另一个域(即WCF服务)上文件的链接时:'https://10.122.150.183:4431/Uploads/1/test.kmz“,文件无法在google earth中打开。我尝试了另

我在通过google earth api打开kmz文件时遇到问题。当我在服务器上提供指向文件的静态链接时,它可以正常工作:

google.earth.fetchKml(ge, 'http://10.122.150.183:8008/test.kmz', checkForCoordinates);
但当我更改另一个域(即WCF服务)上文件的链接时:
'https://10.122.150.183:4431/Uploads/1/test.kmz“
,文件无法在google earth中打开。我尝试了另一种解决方案:从ASP.Net MVC控制器动态提供kmz文件,返回:

return File(fileStream, "application/vnd.google-earth.kmz kmz", fileName);
如果我尝试从浏览器的地址栏中获取它,效果很好,但是当我在
fetchKml
方法中提供指向该操作的链接时,该操作甚至没有inovoke


关于如何从另一个域打开kmz文件,有什么建议吗?

我认为通过指定MIME类型,您的思路是正确的。你已经看到了这个页面上的信息
我已经在wcf中实现了Kmz文件生成器。该服务返回流类型对象,传出响应内容类型设置为“application/vnd.google earth.kmz”

代码如下所示

public class Kmz
{
    public static Stream Generate(string stringKml, string fileName)
    {
        MemoryStream stream = new MemoryStream();
        using (ZipFile zip = new ZipFile())
        {
            zip.AddEntry(fileName, stringKml);
            zip.Save(stream);
        }

        WebOperationContext.Current.OutgoingResponse.ContentType = "application/vnd.google-earth.kmz";

        stream.Position = 0;
        return stream;
    }
}

希望它能有所帮助。

您也可以使用javascript的iframe或脚本方式加载kml内容,这两种方式允许您从不同的域加载资源,然后使用parseKml函数解析kml内容并将其添加到您的地球中

希望能有帮助