From 0095829c16c9756ca03a278687a89fafe2870f86 Mon Sep 17 00:00:00 2001 From: Stephen Smith Date: Wed, 5 Oct 2022 15:22:13 -0400 Subject: [PATCH] 18979: Switch common resource list request to use urlencoded post body for large requests Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- .../common-service/common-resource-service.test.ts | 5 +++-- src/services/common-service/common-service.ts | 10 ++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/services/common-service/common-resource-service.test.ts b/src/services/common-service/common-resource-service.test.ts index b94756ae..7f47f20e 100644 --- a/src/services/common-service/common-resource-service.test.ts +++ b/src/services/common-service/common-resource-service.test.ts @@ -136,8 +136,9 @@ describe("CommonResourceService", () => { await commonResourceService.list({ filters: tooBig }); expect(axiosMock.history.get.length).toBe(0); expect(axiosMock.history.post.length).toBe(1); - expect(axiosMock.history.post[0].data.get('filters')).toBe(`[${tooBig}]`); - expect(axiosMock.history.post[0].params._method).toBe('GET'); + const postParams = new URLSearchParams(axiosMock.history.post[0].data); + expect(postParams.get('filters')).toBe(`[${tooBig}]`); + expect(postParams.get('_method')).toBe('GET'); }); it("#list using GET when query string is not too big", async () => { diff --git a/src/services/common-service/common-service.ts b/src/services/common-service/common-service.ts index f16a2024..bdae87ab 100644 --- a/src/services/common-service/common-service.ts +++ b/src/services/common-service/common-service.ts @@ -156,7 +156,9 @@ export class CommonService { ); } else { // Using the POST special case to avoid URI length 414 errors. - const formData = new FormData(); + // We must use urlencoded post body since api doesn't support form data + // const formData = new FormData(); + const formData = new URLSearchParams(); formData.append("_method", "GET"); Object.keys(params).forEach(key => { if (params[key] !== undefined) { @@ -164,11 +166,7 @@ export class CommonService { } }); return CommonService.defaultResponse( - this.serverApi.post(`/${this.resourceType}`, formData, { - params: { - _method: 'GET' - } - }), + this.serverApi.post(`/${this.resourceType}`, formData, {}), this.actions, showErrors ); -- 2.30.2