1

我想配置一个始终返回单个实体的路由。

控制器看起来像:

class StatsController: ODataController { public Stats Get() { return new Stats(); } } 访问它的 url 应该是:GET ~/service-prefix/stats

我见过的所有选项都涉及必须返回 IQueryable,或者在返回单个实体时,以 ~/service-prefix/EntitySet(1) 的形式传入一个键

有没有办法在不必返回 IQueriable 的情况下实现上述目标?

4

3 回答 3

0

为了在不需要实体集的情况下访问单个对象,odata v4 引入了单例的概念。

从 OData v4 规范

单例允许直接从实体容器寻址单个实体,而无需知道其密钥,也不需要实体集。

更多信息:

于 2014-03-18T15:42:59.790 回答
0

默认情况下,您的方案应该可以访问以下形式的任何操作:

例子:

public Stat Get([FromODataUri] int key) { }

或者

public Stat Get#your-entity-name#([FromODataUri] int key) { }

于 2014-03-17T20:48:50.943 回答
0

我相信 Singleton 可以满足您的要求,但它没有在 WebApi 中实现。幸运的是,还有另一种选择:未绑定函数。只需遵循以下示例:http ://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/ 。

ProductsController中有一个方法:

    [HttpGet]
    [ODataRoute("GetSalesTaxRate(state={state})")]
    public IHttpActionResult GetSalesTaxRate([FromODataUri] string state)
    {
        return Ok(GetRate(state));
    }

它是通过以下 URL 请求的:~/service-prefix/GetSalesTaxReate(state='WA') 并且非常接近您的方案。您唯一需要做的就是删除函数的参数:

    [HttpGet]
    [ODataRoute("GetStats()")]
    public IHttpActionResult GetStats()
    {
        return Ok(new Stats());
    }

现在您可以请求 ~/service-prefix/GetStats()。

于 2014-03-18T23:59:24.757 回答