😶🌫️
JS→C#のリクエストで400エラーが出る
環境
- ASP.NET Core
- React
- TypeScript
- Vite
現象
post時、400 (Bad Request)エラーが出続ける
原因
JS側のデータ型(Number)とC#側のデータ型の不一致
Memo.cs
public class Memo
{
public int Id { get; set; }
public string Description { get; set; } = string.Empty;
}
MemosController.cs
[HttpPost]
public async Task<ActionResult<Memo>> PostMemo(Memo memo)
{
_context.Memo.Add(memo);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetMemo), new { id = memo.Id }, memo);
}
MemoInput.ts
const handleSubmit = async () => {
const newId = new Date().getTime();
const memo: MemoDataType = {
id: newId,
description: description,
};
const response = await fetch('api/Memos', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(memo),
});
}
jsで一意の値を付けたかったためgetTime
を使用した(安直)。
しかしgetTime
で生成される桁数がC#のint
型で表現できる範囲(-2,147,483,648 ~ 2,147,483,647)を超えていたためエラーが発生。
解決策
C#をより大きい数値型にするかjs側のidを小さい整数値にする。
idをlong
にするのがなんか嫌だったのと、テスト用コードだったのでランダム数が格納されるように修正した(安直)。
MemoInput.ts
- const newId = new Date().getTime();
+ const newId = Math.floor(Math.random() * 10000);
Discussion