没有找到路由约定来为OData路径选择一个动作,其中包含模板'〜/ entityset'

时间:2014-07-14 15:04:48

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

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

以下是我的行动方法的代码

[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

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

3 个答案:

答案 0 :(得分:12)

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

改变
public IQueryable<User> GetUser()

public IQueryable<User> GetUserOdata()

或者

public IQueryable<User> Get()

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

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

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