【问题标题】:Enabling OData Filtering on WebApi 2 ASP.NET 4.6.1在 WebApi 2 ASP.NET 4.6.1 上启用 OData 过滤
【发布时间】:2021-06-22 10:43:11
【问题描述】:

我有一个在 ASP.NET 4.6.1 上运行的旧版 WebApi,我需要能够启用对端点的 OData fitler 支持。

但是,通过 Postman 调试控制器时,控制器上的ODataQueryOptions<Job> searchOptions 始终为空。

我的查询字符串示例是;

https://localhost:44310/api/job/find/odata?Filter=[["Title"%2C"contains"%2C"T"]]&Skip=1&Top=5

我添加了System.Web.Http.OData - V5.7.0.0 对控制器的引用。

在我的WebApiConfig Register 方法中使用以下内容;

    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.EnableQuerySupport();
        //config.AddODataQueryFilter();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

    }

请注意,我已经尝试过 EnableQuerySupport()(intellisense 说它已过时)和 AddODataQueryFilter(),但似乎都不起作用。

在我的控制器中,我有以下代码;

    [HttpGet]
    [EnableQuery]
    [Route("find/odata")]
    public PageResult<Job> Find(ODataQueryOptions<Job> searchOptions)
    {
        ...
        return new PageResult<Job>(response.Result, null, null);
    }

我尝试了使用和不使用 [EnableQuery] 过滤器,没有任何变化。

作为参考,我一直在使用的链接是;

Microsoft OData tutorial

【问题讨论】:

    标签: c# asp.net asp.net-web-api asp.net-web-api2


    【解决方案1】:

    对此有任何解决方案吗?我看到了同样的行为。如果我通过 config.Filter() 全局启用过滤器,它可以工作,但我宁愿在一个类一个类或一个属性上逐个属性基本启用它,这似乎不起作用。

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 2016-04-23
      • 2021-11-17
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多