差分

ナビゲーションに移動 検索に移動

ASP.NET CoreでJavaScriptのfetch関数を使う

1,216 バイト追加, 2024年3月7日 (木)
ページの作成:「ASP.NET Coreで何も考えずにJavaScriptのfetch関数を使うとCSRF対策機能が働いて400エラー(Bad Request)になります。 == 対策 ==…」
[[ASP.NET Core]]で何も考えずに[[JavaScript]]のfetch関数を使うと[[CSRF]]対策機能が働いて400エラー(Bad Request)になります。

== 対策 ==
=== service ===
サービスの設定は.NET 8系のテンプレートだとProgram.csにある。
<source lang="csharp">
builder.Services.AddAntiforgery(x => x.HeaderName = "X-CSRF-TOKEN");
</source>

=== cshtml ===
cshtmlの上部(@pageや@modelなどの直下あたり)に以下を追加する。
サーバーサイドでCSRFトークンを生成する。
<source lang="">
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{
var requestToken = Antiforgery.GetAndStoreTokens(this.HttpContext).RequestToken;
}
</source>

=== javascript ===
fetch関数のheadersにCSRFトークンを展開する。
<source lang="javascript">
var data = { "head":"hage" }
fetch('/human', {
method: 'POST',
headers: {
"X-CSRF-TOKEN": "@requestToken",
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify(data)
});
</source>

おわり

== 関連項目 ==
* [[ASP.NET CoreのPageModelのOnPost関数の引数でJSONを受け取る]]

[[category: ASP.NET Core]]

案内メニュー