如何在OData服务文档的根元素中控制基本URL属性?
我正在使用WebApi设置OData服务,System.Web.Http.OData.Builder.ODataConventionModelBuilder
和继承自System.Web.Http.OData.ODataController
的控制器
一切都很好,Excel 2013很乐意访问数据。
尝试使用Excel 2010和PowerPivot时出现问题。我知道在没有Accept标头的情况下发送的fix JSON格式的响应,但我找不到任何有关基本URL问题的讨论。
我已使用config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
设置了我的odata路线,当我点击此网址时,我收到<service xml:base="http://localhost/odata" xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom"/>
Excel 2010 + PowerPivot读取此URL并确定由于基URI上没有尾部斜杠,因此它应该请求根目录中包含URI的集合,例如: <{1}}而不是http://localhost/Products
。
我通过访问服务文档的静态版本来确认我的怀疑,修改后将尾部斜杠添加到基本属性值,然后为集合资源请求正确的URL。
我尝试过使用ASP.Net WebStack源代码来查看是否可以覆盖格式化程序或其他内容,但是迷路了。任何建议都将不胜感激。
答案 0 :(得分:3)
我遇到了与PowerPivot相同的问题,我设法修复了xml:base以与之兼容。这是所需代码的一部分:
class MyODataPathHandler : DefaultODataPathHandler
{
public override string Link(ODataPath path)
{
if (path.PathTemplate == "~")
{
return path.ToString() + "/";
}
return base.Link(path);
}
}
和
config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel(), new MyODataPathHandler(), ODataRoutingConventions.CreateDefault());
自定义ODataPathHandler将为默认路径添加额外的斜杠,这将导致xml:base解决PowerPivot中的错误。第二个问题是PowerPivot期望XML中的数据,而不是JSON中的数据。可以在http://aspnetwebstack.codeplex.com/workitem/820
找到一种解决方法