我有像这样的OData-Controller(缩短代码):
public class FooController : ODataController
{
[Queryable]
public IEnumerable<Foo> Get()
{
return ...;
}
[Queryable]
public SingleResult<Foo> GetById([FromODataUri] int id)
{
return SingleResult.Create<Foo>(...);
}
我在浏览器中调用/myprefix/foo
并调用Get()
方法。
现在我在浏览器中调用/myprefix/foo(1)
,始终调用Get()
方法。
但我想调用GetById()
方法。
如何运行GetById()
?
感谢
答案 0 :(得分:6)
我确认评论中提供的解决方案是正常工作。
使用键作为参数名称更改方法参数:
public Unit GetBook([FromODataUri] int key)
{
return db.Books.Single(b => b.BookID == key);
}
并且它会接受这种请求,传递记录主键:
server/odata/Books(34)
答案 1 :(得分:2)
Web API中的默认OData路由约定会查找以下操作:
GetFoo([FromODataUri] int id)
(即...&#34;获取&#34; +实体类型名称)
OR
Get([FromODataUri] int id)
所以请务必将您的操作更改为上述任一项。
如果您不喜欢上述约定,可以编写自定义IODataRoutingConvention
答案 2 :(得分:1)
如果你想调用GetById()方法。
只是你打电话给 / api / foo / GetById?id =
答案 3 :(得分:0)
如果路径名称与实体集不同,您可以执行的操作是添加ODataRoute属性:
对于查询IEnumerable,您将使用属性:
[ODataRoute("Foo")]
public IEnumerable<Foo> Get()
要查询单个结果,您可以使用以下语法:
[ODataRoute("Foo({key})")]
public SingleResult<Foo> GetById([FromODataUri] int key)
除此之外,我想现在使用EnableQuery而不是Queryable也是可取的。