【问题标题】:Odata v3 Web Api navigation with composite key使用复合键的 Odata v3 Web Api 导航
【发布时间】:2015-01-08 09:38:19
【问题描述】:

我有一个使用 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; }
}

我关注了this msdn article and created a NavigationRoutingConvention。该应用程序现在可以很好地处理复合键。但是,像这样的导航链接不起作用:

http://localhost/WebApiV3/AerodromoAdministracaoData%28idAerodromo=1,data=%272014-10-24%27%29/Aerodromo

我不断收到“未找到与请求匹配的 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;
    }

found this question 谈论完全相同的问题,但我还没有弄清楚Nikon 是如何处理这个问题的。

【问题讨论】:

    标签: asp.net asp.net-web-api odata composite-key


    【解决方案1】:

    爱德华多

    来自 MSDN 文章Support Composite Key in ASP.NET Web API OData

    public class CompositeKeyRoutingConvention : EntityRoutingConvention
    {
       ....
    }
    

    上述路由约定可以涵盖以下Uri模板:

    • ~/entityset/key
    • ~/entityset/key/cast

    但是,它不能覆盖~/entityset/key/navigation

    修复很简单,只是从NavigationRouteConvention 派生而来,如下所示

    public class CompositeKeyRoutingConvention : NavigationRoutingConvention
    {
        ...
    }
    

    以下是调试信息:

    请确保:如果您想同时支持两个 Uris:

    • /AerodromoAdministracaoData%28idAerodromo=1,data=%272014-10-24%27%29
    • /AerodromoAdministracaoData%28idAerodromo=1,data=%272014-10-24%27%29/Aerodromo

    您必须有两种自定义路由约定,一种源自EntityRoutingConvention,另一种源自NavigationRoutingConvention

    希望对您有所帮助。谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2013-12-25
      • 1970-01-01
      • 2020-12-17
      相关资源
      最近更新 更多