【发布时间】:2014-05-28 15:19:24
【问题描述】:
我正在尝试制作一个连接到我的数据库的 web api,获取一些地理数据,然后返回一个网页将使用的 KML 内容(在谷歌地图 iframe/div 上显示信息)。
我正在使用sharpKML(我不知道这是否是正确的选择):
public class KmlController : ApiController
{
public HttpResponseMessage Get()
{
Point point = new Point();
point.Coordinate = new Vector(37.42052549, -122.0816695);
Placemark placemark = new Placemark();
placemark.Name = "Somewhere";
placemark.Geometry = point;
Kml kml = new Kml();
kml.Feature = placemark;
return Request.CreateResponse(HttpStatusCode.OK, kml, new XmlMediaTypeFormatter(), "application/vnd.google-earth.kml+xml");
}
}
但是当我打电话给http://something.on.my.lan/api/kml 时,我得到了这个异常:
System.InvalidOperationException: “ObjectContent`1”类型无法序列化内容类型“application/vnd.google-earth.kml+xml”的响应正文; charset=utf-8'。
我错过了什么?
解决方案
不幸的是,正如this 回答中所说,即使我设法动态创建 KML 内容,它也不会显示在地图上,因为该 URL 必须由 Google 公开访问(用于缓存目的)。我必须改变方法。
【问题讨论】:
-
奇怪的是,您正在对方法本身进行序列化。媒体格式化程序在 Global.asax 类的注册方法中设置。我猜你的格式化程序有冲突
-
您建议如何执行此操作?我尝试 als 返回一个 Kml 对象,但自己没有管理序列化,但没有运气(类似的例外):“'ObjectContent`1' 类型无法序列化内容类型'application/xml; charset = utf-8'的响应主体。”
标签: c# asp.net-mvc-4 asp.net-web-api kml sharpkml