さて、フォームtagHelperでレンダリングされたフォームがあります。だから、偽造防止トークンのための特別な隠しが含まれています。json post request bodyのASP.NETコアパスantiforgerytoken
と私は次のAjaxリクエスト送信しようとしています:
var data = JSON.stringify(feedbackForm.serializeArray().reduce((res, item) => {
res[item.name] = item.value;
return res; }, {}));
// data example: '{"Description":"some description", "__RequestVerificationToken":"CfDJ8F9f8kTKlVNEsnTxejQIJ__pRCl2CuZTQDVAY2216J7GgHWGDC0XUMPc0FKHpr_K5uhz8Kx0VeHDkIPdQ3V0Xur9oLE2u_bpfXuVss6AWX3BVh0WbwfQriaibOrf_yvEuIYZV-jHU_G-AHPD91cKz_QE7MVmeLVgTum80yTb8biGctMtJcU67Wp7ZgN86yMuew"}'`
$.ajax({
type: "POST",
url: '@Url.Action("Feedback", "Profile", new {Area = ""})',
contentType: "application/json; charset=utf-8",
data: data,
dataType: "json"
});
はそのように見える行動をコントローラにする:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Feedback([FromBody]FeedbackViewModel vm)
{
...
}
ので、まだ、データがantiforgeryトークンのキーが含まれるが、要求をしませポスト偽造防止妥当性検査をパスし、エラーで失敗しました。コントローラから偽造防止の検証属性を削除すると、それは完全に機能します。
リクエストボディの内部でトークンをチェックしないのはなぜですか?それは設計上の問題なのですか、それとも何らかの問題ですか?
[ASP.NETコアとjQueryを使ってAntiforgeryトークンを有効にする](https://stackoverflow.com/questions/40530474/enable-antiforgery-token-with-asp-net-core-and-の可能性のある重複jquery) –
さて、実装をヘッダーに変更したくないので、なぜリクエストボディで動作しないのかを知りたいのですが。 –
私は最近、IIRCと同様の仕事をしてきました。ヘッダーとデータ要素が一致する必要があります。 –