Odata V4路由前缀和批处理syncfusion
Odata V4 routing prefix and batch processing syncfusion
我正在使用 Syncfusion 的日程安排工具。调度程序正在与 odata 端点对话。 odata 服务 运行 正确获取、放置、删除。但是,调度程序使用 $batch 来处理对调度的编辑。我无法让 $batch 正确路由 and/or 进程。
默认情况下,调度程序会像这样进行编辑调用:
https://localhost:44341/odata/Events/$batch
这是我的路线图:
app.UseMvc(builder =>
{
builder.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
builder.MapODataServiceRoute("odata", "odata", GetEdmModel());
builder.MapODataServiceRoute("odataBatch", "odata/{controller}", GetEdmModel(), new DefaultODataBatchHandler());
});
所以我在我的 headers 中获得了成功 (200) POST 但响应是 404。我对发生的事情感到非常困惑。控制器似乎没有处理批处理命令。特别是负载 body 中的 POST 和 PATCH 命令。预先感谢您的帮助。
在开发工具 (CHROME) 中,这是我看到的:
响应选项卡
--batchresponse_e2f02110-21b6-4559-924e-1e2b3376fb3c
Content-Type: multipart/mixed;边界=changesetresponse_4799e072-83d9-4b7d-9409-23eceb98736b
--changesetresponse_4799e072-83d9-4b7d-9409-23eceb98736b
Content-Type: application/http
Content-Transfer-Encoding:二进制
Content-ID: 0
HTTP/1.1 404 未找到
--changesetresponse_4799e072-83d9-4b7d-9409-23eceb98736b--
--batchresponse_e2f02110-21b6-4559-924e-1e2b3376fb3c--
HEADERS TAB
一般
请求URL:https://localhost:44341/odata/Events/$batch
请求方式:POST
状态码:200
远程地址:[::1]:44341
推荐人政策:no-referrer-when-downgrade
回应Header
access-control-allow-origin: https://localhost:44308
content-type: multipart/mixed;边界=batchresponse_e2f02110-21b6-4559-924e-1e2b3376fb3c
日期:2019 年 6 月 12 日,星期三 21:35:08 GMT
odata-version: 4.0
服务器:红隼
状态:200
x-powered-by: ASP.NET
x-sourcefiles: =?UTF-8?B?QzpcVlMyMDE3IFByb2plY3RzXFRIUFRPZGF0YVxPZGF0YUxlYXJuaW5nXG9kYXRhXEV2ZW50c1wkYmF0Y2g=?=
请求Header
显示临时 headers
接受:application/json、text/javascript、/; q=0.01
Content-Type: multipart/mixed;字符集=UTF-8;边界=batch_80a929c5-2918-463e-ba41-aa8c981ffb3b
DNT: 1
更喜欢:return=代表
推荐人:https://localhost:44308/admin/home/scheduler
User-Agent:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/74。 0.3729.169Safari/537.36
请求负载
--batch_80a929c5-2918-463e-ba41-aa8c981ffb3b
Content-Type: multipart/mixed;边界=changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2
--changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2
Content-Type: application/http
Content-Transfer-Encoding: 二进制
POST 空 HTTP/1.1
接受:application/json、text/javascript、/; q=0.01
Content-Id: 0
Content-Type: application/json;字符集=utf-8
{"Id":2,"Subject":"Joe's Pizza Shack","StartTime":"2019-06-09T02:00:00.000Z","EndTime" :"2019-06-09T07:30:00.000Z","StartTimezone":"America/New_York","EndTimezone":"America/New_York","Location":"123 某处,朗伍德, FL 32750","Description":"asdfadfada","IsAllDay":false,"IsRecurring":true,"RecurrenceID":1,"RecurrenceRule":"FREQ=WEEKLY;BYDAY=SA;INTERVAL=1;","RecurrenceException":null,"IsReadonly":false,"IsBlock":false,"IsActive":true,"IsDisabled":false,"VenueId":1, "Guid":"4a0d1282-678b-b4b8-e84a-0cbb011887d4"}
--changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2
Content-Type: application/http
Content-Transfer-Encoding: 二进制
补丁https://localhost:44341/odata/Events(1)HTTP/1.1
接受:application/json、text/javascript、/; q=0.01
Content-Id: 1
Content-Type: application/json;字符集=utf-8
{"Id":1,"Subject":"Joe's Pizza Shack","StartTime":"2019-06-09T02:00:00.000Z","EndTime" :"2019-06-09T07:30:00.000Z","StartTimezone":"America/New_York","EndTimezone":"America/New_York","Location":"123 某处,朗伍德, FL 32750","Description":"adgadgadfafdas","IsAllDay":false,"IsRecurring":true,"RecurrenceID":null,"RecurrenceRule":"FREQ=WEEKLY;BYDAY=SA;INTERVAL=1;","RecurrenceException":"20190609T020000Z","IsReadonly":false,"IsBlock":false,"IsActive":true,"IsDisabled":false,"VenueId": 1}
--changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2--
--batch_80a929c5-2918-463e-ba41-aa8c981ffb3b--
找到问题了。
它在负载中。
POST null HTTP/1.1 Accept: application/json, text/javascript, /; q=0.01 Content-Id: 0 Content-Type: application/json; charset=utf-8
在您需要 POST 的地方不能有空值。检查了数据管理器,我忘记配置 insertUrl。
我正在使用 Syncfusion 的日程安排工具。调度程序正在与 odata 端点对话。 odata 服务 运行 正确获取、放置、删除。但是,调度程序使用 $batch 来处理对调度的编辑。我无法让 $batch 正确路由 and/or 进程。
默认情况下,调度程序会像这样进行编辑调用:
https://localhost:44341/odata/Events/$batch
这是我的路线图:
app.UseMvc(builder =>
{
builder.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
builder.MapODataServiceRoute("odata", "odata", GetEdmModel());
builder.MapODataServiceRoute("odataBatch", "odata/{controller}", GetEdmModel(), new DefaultODataBatchHandler());
});
所以我在我的 headers 中获得了成功 (200) POST 但响应是 404。我对发生的事情感到非常困惑。控制器似乎没有处理批处理命令。特别是负载 body 中的 POST 和 PATCH 命令。预先感谢您的帮助。
在开发工具 (CHROME) 中,这是我看到的:
响应选项卡
--batchresponse_e2f02110-21b6-4559-924e-1e2b3376fb3c Content-Type: multipart/mixed;边界=changesetresponse_4799e072-83d9-4b7d-9409-23eceb98736b
--changesetresponse_4799e072-83d9-4b7d-9409-23eceb98736b Content-Type: application/http Content-Transfer-Encoding:二进制 Content-ID: 0
HTTP/1.1 404 未找到
--changesetresponse_4799e072-83d9-4b7d-9409-23eceb98736b-- --batchresponse_e2f02110-21b6-4559-924e-1e2b3376fb3c--
HEADERS TAB
一般
请求URL:https://localhost:44341/odata/Events/$batch
请求方式:POST
状态码:200
远程地址:[::1]:44341
推荐人政策:no-referrer-when-downgrade
回应Header
access-control-allow-origin: https://localhost:44308
content-type: multipart/mixed;边界=batchresponse_e2f02110-21b6-4559-924e-1e2b3376fb3c
日期:2019 年 6 月 12 日,星期三 21:35:08 GMT
odata-version: 4.0
服务器:红隼
状态:200
x-powered-by: ASP.NET
x-sourcefiles: =?UTF-8?B?QzpcVlMyMDE3IFByb2plY3RzXFRIUFRPZGF0YVxPZGF0YUxlYXJuaW5nXG9kYXRhXEV2ZW50c1wkYmF0Y2g=?=
请求Header
显示临时 headers
接受:application/json、text/javascript、/; q=0.01
Content-Type: multipart/mixed;字符集=UTF-8;边界=batch_80a929c5-2918-463e-ba41-aa8c981ffb3b
DNT: 1
更喜欢:return=代表
推荐人:https://localhost:44308/admin/home/scheduler
User-Agent:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/74。 0.3729.169Safari/537.36
请求负载
--batch_80a929c5-2918-463e-ba41-aa8c981ffb3b Content-Type: multipart/mixed;边界=changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2
--changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2 Content-Type: application/http Content-Transfer-Encoding: 二进制
POST 空 HTTP/1.1 接受:application/json、text/javascript、/; q=0.01 Content-Id: 0 Content-Type: application/json;字符集=utf-8
{"Id":2,"Subject":"Joe's Pizza Shack","StartTime":"2019-06-09T02:00:00.000Z","EndTime" :"2019-06-09T07:30:00.000Z","StartTimezone":"America/New_York","EndTimezone":"America/New_York","Location":"123 某处,朗伍德, FL 32750","Description":"asdfadfada","IsAllDay":false,"IsRecurring":true,"RecurrenceID":1,"RecurrenceRule":"FREQ=WEEKLY;BYDAY=SA;INTERVAL=1;","RecurrenceException":null,"IsReadonly":false,"IsBlock":false,"IsActive":true,"IsDisabled":false,"VenueId":1, "Guid":"4a0d1282-678b-b4b8-e84a-0cbb011887d4"}
--changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2 Content-Type: application/http Content-Transfer-Encoding: 二进制
补丁https://localhost:44341/odata/Events(1)HTTP/1.1 接受:application/json、text/javascript、/; q=0.01 Content-Id: 1 Content-Type: application/json;字符集=utf-8
{"Id":1,"Subject":"Joe's Pizza Shack","StartTime":"2019-06-09T02:00:00.000Z","EndTime" :"2019-06-09T07:30:00.000Z","StartTimezone":"America/New_York","EndTimezone":"America/New_York","Location":"123 某处,朗伍德, FL 32750","Description":"adgadgadfafdas","IsAllDay":false,"IsRecurring":true,"RecurrenceID":null,"RecurrenceRule":"FREQ=WEEKLY;BYDAY=SA;INTERVAL=1;","RecurrenceException":"20190609T020000Z","IsReadonly":false,"IsBlock":false,"IsActive":true,"IsDisabled":false,"VenueId": 1}
--changeset_f9c22042-3196-4452-a1c6-2fd55993e2a2-- --batch_80a929c5-2918-463e-ba41-aa8c981ffb3b--
找到问题了。
它在负载中。
POST null HTTP/1.1 Accept: application/json, text/javascript, /; q=0.01 Content-Id: 0 Content-Type: application/json; charset=utf-8
在您需要 POST 的地方不能有空值。检查了数据管理器,我忘记配置 insertUrl。