【问题标题】:No routing convention was found to select an action for the OData path with template '~/entityset'没有找到路由约定来为具有模板“~/entityset”的 OData 路径选择操作
【发布时间】:2014-09-04 13:16:58
【问题描述】:

我定义了两个 Odata 操作方法。一个有参数的被调用,而另一个没有参数的没有被调用并抛出错误没有找到路由约定来为模板'~/entityset'的OData路径选择一个操作。

这是我的操作方法的代码

[EnableQuery]
    public IQueryable<User> GetUser()
    {
        return db.Users;
    }

    // GET: odata/User(5)
    [EnableQuery]
    public SingleResult<User> GetUser([FromODataUri] int key)
    {
        return SingleResult.Create(db.Users.Where(user => user.Id == key));
    }

我使用的查询如下

http://bureauservice/api/odata/UserOdata - Doesnt work
http://bureauservice/api/odata/UserOdata(1) - works

谁能告诉我为什么第一个链接不起作用。

【问题讨论】:

    标签: c#-4.0 asp.net-web-api odata asp.net-web-api-routing odata4j


    【解决方案1】:

    您可能希望将括号添加到第一个 URL:

    http://bureauservice/api/odata/UserOdata() 
    

    如果您刚刚开始使用 odata,那么 Odata v4 是一个很好的起点,因为它是 OASIS 标准,但 v3 不是。

    这里是 v4 版本的函数示例: https://github.com/OData/ODataSamples/tree/master/WebApiCore/ODataFunctionSample

    【讨论】:

    • 链接已损坏 :(
    【解决方案2】:

    将第一个操作的名称设置为 GetUsers(复数),因为您正在获取整个用户集合,而在第二个操作中您要求的是单个用户。

    【讨论】:

      【解决方案3】:

      请将返回实体集的方法名称更改为“Get[EntitySetName]”或“Get”。

      改变

      public IQueryable<User> GetUser()
      

      public IQueryable<User> GetUserOdata()
      

      或者

      public IQueryable<User> Get()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-21
        • 2018-03-31
        • 2018-08-25
        • 2014-08-27
        • 2018-03-29
        • 2015-11-03
        • 1970-01-01
        • 2017-03-13
        相关资源
        最近更新 更多