Edu*_*rdo 6 asp.net composite-key odata asp.net-web-api
我有一个使用Odata v3的Web Api,其中一些实体是复合键,如下所示:
public class AerodromoAdministracaoData
{
[Key]
[Column("idAerodromo", Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public short IdAerodromo { get; set; }
[Key]
[Column("data", Order = 1, TypeName = "date")]
public DateTime Data { get; set; }
public virtual Aerodromo Aerodromo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我按照这篇msdn文章创建了一个NavigationRoutingConvention.应用程序现在处理复合键.但是,像这样的导航链接不起作用:
http://localhost/WebApiV3/AerodromoAdministracaoData%28idAerodromo=1,data=%272014-10-24%27%29/Aerodromo
Run Code Online (Sandbox Code Playgroud)
我一直收到"没有找到与请求匹配的HTTP资源",好像该方法没有在控制器中实现.顺便说一句,这是控制器方法:
[EnableQuery]
public Aerodromo GetAerodromo([FromODataUri] short idAerodromo, [FromODataUri] DateTime data)
{
AerodromoAdministracaoData result = Store.AerodromoAdministracaoData.Find(idAerodromo, data);
if (result == null)
{
throw new HttpResponseException(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.NotFound));
}
return result.Aerodromo;
}
Run Code Online (Sandbox Code Playgroud)
爱德华多
来自 MSDN 文章在 ASP.NET Web API OData 中支持复合键
public class CompositeKeyRoutingConvention : EntityRoutingConvention
{
....
}
Run Code Online (Sandbox Code Playgroud)
上述路由约定可以涵盖以下Uri模板:
但是,它不能覆盖~/entityset/key/navigation
修复很简单,只需从NavigationRouteConvention下面导出
public class CompositeKeyRoutingConvention : NavigationRoutingConvention
{
...
}
Run Code Online (Sandbox Code Playgroud)
下面是调试信息:

请确保:如果您想支持两个 Uris:
您必须有两种自定义路由约定,一种源自EntityRoutingConvention,另一种源自NavigationRoutingConvention。
希望它能有所帮助。谢谢。
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |