javascriptで連想配列をapplication/x-www-form-urlencodedで送信する方法がわからなくて困っています。
サーバー側プログラムの都合により、application/jsonではうまくいかなく、application/x-www-form-urlencodedで送信しようとしています。
この形式のデータ送信を行いたいです。dataで単一オブジェクトを送信はうまくいくのですが、
連想配列(配列に入れているオブジェクト)ではうまく送信ができなく困っています。
Server側のオブジェクトのプロパティ名は大文字で始まるため、送信時は合わせています。
どなたかご教授お願いします。
javascript
1// 送信したいデータ 2const data = [ 3 { Id: 1, Name: Test1 }, 4 { Id: 2, Name: Test2 } 5];
javascript
1// (OK) dataで単一オブジェクトを送信 2 3// dataをURLSearchParamsで変換 4const data = { 5 Id: 1, 6 Name: Test1 7} 8 9const param = getUrlSearchParams(data); 10 11function getUrlSearchParams(data) { 12 var params = new URLSearchParams(); 13 Object.keys(data).forEach(function (key) { 14 if (key == "Id") { 15 params.append(key, data[key]); 16 } else { 17 if (data[key] != null) { 18 params.append(key, data[key]); 19 } else { 20 params.append(key, ""); 21 } 22 } 23 }); 24 25 return params; 26} 27 28// Send 29axios({ 30 method: "post", 31 url: "/Tests/Register" 32 headers: { 33 "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 34 }, 35 data: param 36}).then((response) => { 37 console.log("Ok"); 38}).catch((response) => { 39 console.log("NG"); 40});
javascript
1// (NG) 連想配列(配列に入れているオブジェクト)を送信しようとしているがうまくいかない 2 3// dataをURLSearchParamsで変換 4const data = [ 5 { Id: 1, Name: Test1 }, 6 { Id: 2, Name: Test2 } 7]; 8 9const params = tempRowData.reduce((accumulator, currentValue) => { 10 accumulator.push(getUrlSearchParams(currentValue)); 11 return accumulator; 12}, []); 13 14function getUrlSearchParams(data) { 15 var params = new URLSearchParams(); 16 Object.keys(data).forEach(function (key) { 17 if (key == "Id") { 18 params.append(key, data[key]); 19 } else { 20 if (data[key] != null) { 21 params.append(key, data[key]); 22 } else { 23 params.append(key, ""); 24 } 25 } 26 }); 27 28 return params; 29} 30 31// Send 32axios({ 33 method: "post", 34 url: "/Tests/Register" 35 headers: { 36 "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 37 }, 38 data: params 39}).then((response) => { 40 console.log("Ok"); 41}).catch((response) => { 42 console.log("NG"); 43});
C#
1// サーバー側 2 3[HttpPost] 4public async Task<IActionResult> Register(IList<Test> tests) { 5 // ... 6
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/02/17 07:32