Dar*_*ran 5 odata asp.net-web-api
如何在OData服务文档的根元素中控制基本URL属性?
我正在使用WebApi设置OData服务,System.Web.Http.OData.Builder.ODataConventionModelBuilder继承自的控制器和控制器System.Web.Http.OData.ODataController
这一切都很美妙,Excel 2013愉快地访问数据.
尝试使用Excel 2010和PowerPivot时出现问题.我知道在没有Accept标头的情况下发送JSON格式的响应的修复程序,但我找不到任何有关基本URL问题的讨论.
我设置了我的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的集合,例如,http://localhost/Products而不是http://localhost/odata/Products它应该.
我通过访问服务文档的静态版本来确认我的怀疑,修改后将尾部斜杠添加到基本属性值,然后为集合资源请求正确的URL.
我已经尝试通过ASP.Net WebStack源代码来查看我是否可以覆盖格式化程序或其他东西,但是迷路了.任何建议将不胜感激.
小智 3
我在使用 PowerPivot 时遇到了同样的问题,我设法修复 xml:base 使其与其兼容。这是所需的代码部分:
class MyODataPathHandler : DefaultODataPathHandler
{
public override string Link(ODataPath path)
{
if (path.PathTemplate == "~")
{
return path.ToString() + "/";
}
return base.Link(path);
}
}
Run Code Online (Sandbox Code Playgroud)
和
config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel(), new MyODataPathHandler(), ODataRoutingConventions.CreateDefault());
Run Code Online (Sandbox Code Playgroud)
自定义 ODataPathHandler 将为默认路径添加额外的斜杠,这会生成一个 xml:base 来解决 PowerPivot 中的错误。第二个问题是 PowerPivot 需要 XML 格式的数据,而不是 JSON 格式的数据。可以在http://aspnetwebstack.codeplex.com/workitem/820找到一种解决方法
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |