如何通过 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 中映射路线。
有一个 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 中映射路线。