Asp.net web api 如何为总是返回单个实体的方法配置ODataWebAPI路由
我想配置一个始终返回单个实体的路由 控制器看起来像: StatsController类:ODataController{ 公共统计数据获取{ 返回新的统计数据; } } 访问它的url应该是:GET~/service prefix/stats 我看到的所有选项都涉及必须返回IQueryable,或者在返回单个实体时,以~/service prefix/EntitySet1的形式传入一个键Asp.net web api 如何为总是返回单个实体的方法配置ODataWebAPI路由,asp.net-web-api,odata,asp.net-web-api-routing,asp.net-web-api2,asp.net-web-api-odata,Asp.net Web Api,Odata,Asp.net Web Api Routing,Asp.net Web Api2,Asp.net Web Api Odata,我想配置一个始终返回单个实体的路由 控制器看起来像: StatsController类:ODataController{ 公共统计数据获取{ 返回新的统计数据; } } 访问它的url应该是:GET~/service prefix/stats 我看到的所有选项都涉及必须返回IQueryable,或者在返回单个实体时,以~/service prefix/EntitySet1的形式传入一个键 有没有一种方法可以在不返回iQuery的情况下实现上述功能?默认情况下,您的场景应该可以访问以下形式的任何操
有没有一种方法可以在不返回iQuery的情况下实现上述功能?默认情况下,您的场景应该可以访问以下形式的任何操作: 例如: 公共统计获取[FromODataUri]int键{} 或
public Stat Getyour entity name[FromODataUri]int key{}要访问单个对象而不需要entityset,odata v4引入了单例的概念 : singleton允许直接从实体容器寻址单个实体,而无需知道其密钥,也无需实体集 更多信息:
我相信Singleton可以满足您的需求,但它并没有在WebApi中实现。幸运的是,还有另一种选择:unbound函数。只需遵循以下示例: ProductsController中有一个方法:
[HttpGet]
[ODataRoute("GetSalesTaxRate(state={state})")]
public IHttpActionResult GetSalesTaxRate([FromODataUri] string state)
{
return Ok(GetRate(state));
}
它是通过以下URL请求的:~/service prefix/GetSalesTaxCreateState='WA',非常接近您的场景。您只需删除函数的参数:
[HttpGet]
[ODataRoute("GetStats()")]
public IHttpActionResult GetStats()
{
return Ok(new Stats());
}
现在您可以请求~/sevice prefix/GetStats。根据OData协议,服务前缀之后的路径段主要是一个实体集,这意味着将返回一组实体。我想知道为什么你只需要一个实体而不是一个集合,通过请求这样一个URL?@tanjinfu从概念上讲,端点总是返回一个对象。该对象表示应用程序的当前状态,但它从来不是集合。感谢您的回复。我已经发布了我的答案。嗯……这个单例与你的问题有什么关系?@KiranChalla,ODataAPI上下文中的单例概念正是我所需要的:服务提供的单个实体,它从不在集合中,并且可以在不必提供索引的情况下解决