1

偽造防止メカニズムを使用して ajax 投稿を保護しようとしています。

まず、antiforgerytoken ヘルパー メソッド呼び出しをビューに追加しました。

@Html.AntiForgeryToken()

そして、私のjqueryポストコールを調整しました

var values = $(this).serialize() + "&__RequestVerificationToken=" + $("input[name='__RequestVerificationToken']").val();

$.post(url, values)
    .success(page.submitSuccess)
    .error(page.submitError)
    .complete(page.submitComplete);

もちろん、アクション メソッドを ValidateAntiForgeryToken で装飾しました

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ProjectCreateCommand command)
{
    ....
}

しかし、フォームを送信した後、必要な偽造防止トークンが提供されなかったか、無効なエラーがスローされます。

トークン Cookie を削除し、ブラウザを再起動しました。

何か不足していますか?

4

1 に答える 1

1

使用$(form).serialize();すると、すべての入力タグがシリアル化されるため、$.post jquery メソッドで実行できます。次のようなことを試してください:

$("#you_form").submit(function (e) {
    e.preventDefault();
    $.ajax({
       type: 'POST',
       url: $(this).attr("action"), // get url from action attribute, your route setted by the Html.BeginForm()
       data: $(this).serialize(), // serialize all input tags from this form
       success: page.submitSuccess; 
    });
});

を使用しても問題ありません@Html.AntiForgeryToken()。 serialize メソッドはこれを一緒に追加します。

このリンクを見てください: http://api.jquery.com/jQuery.post/

于 2012-06-05T12:29:36.237 に答える