如何通过 Ocelot 获取 Kendo grid DataSourceRequest 对象?

How can I get Kendo grid DataSourceRequest object through Ocelot?

有一个 Api 由 ocelot 配置的网关。我想使用 Kendo 对象请求 Api 并将其作为 Kendo DataSourceRequest 接收。我刚刚在 Angular 和 dot net core Api 项目中完成了它并且它工作正常。但是,在当前的项目中,我不知道如何通过 Ocelot 做到这一点。这是我在下面的 Api 方法。

    [HttpGet]
    public ActionResult User_Read([DataSourceRequest] DataSourceRequest request)
    {
        var data = _unitOfWork.Repository<User>().GetAll();
        return Ok(data.ToList().ToDataSourceResult(request, ModelState));
    }

豹猫配置

{
  "DownstreamPathTemplate": "/api/auth/User_Read/{everything}",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "localhost",
      "Port": 9001
    }
  ],
  "UpstreamPathTemplate": "/User_Read/{everything}",
  "UpstreamHttpMethod": [ "get" ]
}

我的客户端请求代码是这样的:

          read: function (e) {
        if (thisObject.defaultFilter) {
          if (e.data.filter) {
            var filters = e.data.filter.filters;
            var existFilter = filters.filter(function (obj) {
              if (obj.field == thisObject.defaultFilter.field) return true;
            }).lenght > 0;
            if (!existFilter) e.data.filter.filters.push(thisObject.defaultFilter);
          }
          else {
            e.data.filter = { logic: "and", filters: [thisObject.defaultFilter] }
          }
        }

        const params = `${toDataSourceRequestString(e.data)}`;
        // datasource read request
        thisObject.http.get(thisObject.readUrl + "?" + params).subscribe((res) => {
          e.success(res);
        });
      }

你会发现如何在 dot net core 和 angular 中发送读取数据的请求很容易 kendo 网格 here

最后我自己找到了解决方案。问题出在 Ocelot 配置中。我会解释为答案。

我应该将 "/api/auth/User_Read/{everything}" 替换为 "/api/auth/User_Read?{url}" 或任何名称,而不是像“一切”一样的“url”。 重要的是“?”用于在 Ocelot 中映射路线。