9

我定义了两个 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

有人可以告诉我为什么第一个链接不起作用。

4

3 回答 3

14

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

从改变

public IQueryable<User> GetUser()

public IQueryable<User> GetUserOdata()

或者

public IQueryable<User> Get()
于 2014-07-15T07:06:15.760 回答
4

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

于 2014-11-03T21:03:11.460 回答
0

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

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

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

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

于 2014-07-14T23:47:49.870 回答