在WebApi OData中将OData服务文档基本URL作为尾部斜杠
如何控制OData服务文档的根元素中的基本URL属性?
我使用WebApi, System.Web.Http.OData.Builder.ODataConventionModelBuilder
以及从System.Web.Http.OData.ODataController
继承的控制器来设置OData服务
这一切都运行得很好,Excel 2013很高兴地访问数据。
尝试使用Excel 2010和PowerPivot时出现问题。 我知道在没有Accept头的情况下发送的JSON格式化响应的修复程序,但我找不到任何有关基本URL的问题的讨论。
我已经使用config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
设置了我的odata路由config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
当我打这个URL时,我得到了一个<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中的URI的集合,例如http://localhost/Products
而不是http://localhost/odata/Products
正如它应该。
我通过访问服务文档的静态版本来确认我的怀疑,修改后将斜线添加到基本属性值,然后为集合资源请求正确的URL。
我已经尝试通过ASP.Net WebStack源代码来查看是否可以重写格式化程序或其他东西,但是已经丢失。 任何建议将不胜感激。
我与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
链接地址: http://www.djcxy.com/p/20401.html上一篇: Give OData service document base URL a trailing slash in WebApi OData
下一篇: Returning PageResult from WebAPI not formatting as OData