使用OData和自定义查询选项获取路线

时间:2018-10-30 14:23:21

标签: c# rest asp.net-web-api odata

我们有一个控制器,该控制器在get路由中需要一些参数,但是$top之类的OData函数不起作用。

According to the docs(自定义查询选项)仅在自定义选项中声明@前缀就可以正常工作,但不是:

  • 使用@作为前缀(如文档中所建议),参数filtro未被填充,并且为其所有属性获取默认值。
  • 不使用前缀就不会返回错误,但是$top函数将被忽略,并且显示的记录太多了(2K +)。

There is another answer here on SO to something similar,但可以推断,我们使用的OData V3没有明确的Edm模型构建器。

你们解决了这个问题吗?

这是我的代码:

获取请求:

~/ProdutosRelevantes?$top=5&
    filtro.Cnpjs[0]=00000000000001&
    filtro.DataInicio=2018-01-01&
    filtro.DataFim=2018-12-01&
    filtro.IndMercado=2&

控制器方法:

[HttpGet]
public IHttpActionResult ProdutosRelevantes([FromUri] ParametrosAnalise filtro)
{
    var retorno = GetService().GetProdutosRelevantes(filtro);
    return Content(HttpStatusCode.OK, retorno);
}
public class ParametrosAnalise
  {
      public Guid IdCliente { get; set; }
      public string[] Cnpjs { get; set; }
      public DateTime? DataInicio { get; set; }
      public DateTime? DataFim { get; set; }
      public EnumEscopoMercado? IndMercado { get; set; }      
      // Enum declaration
      public enum EnumEscopoMercado
      {
          [Description("INCLUI NACIONAL")]
          InternoEExterno = 1,
          [Description("EXTERIOR")]
          Externo = 2
      }
  }

谢谢。

1 个答案:

答案 0 :(得分:5)

您是否在操作中使用[EnableQuery]装饰器启用了oData? 还是在您的HttpConfiguration => config.EnableQuerySupport()中?

https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options