Web フォーム ページ ( profile.aspx ) から MVC ビュー ( signin.aspx ) にページをリダイレクトします。MVC コントローラーで[ValidateAntiForgeryToken]
トークン情報を取得する必要があるのですが、MVC ビューを送信すると、「必要な偽造防止トークンが提供されていないか、無効でした」というメッセージが表示されます。を削除する[ValidateAntiForgeryToken]
と、エラー メッセージは表示されなくなりますが、トークン情報は失われます。検証のためにこれらすべてのトークン情報が必要です。では、どうすればこの種の問題を修正できますか? ありがとう。
1 に答える
ビューで、宣言する場所で<form>
@Html.AntiForgeryToken() ヘルパーを使用する必要があります。
@using (Html.BeginForm()) {
Html.AntiForgeryToken()
// The rest of your code
<div class="something">
@Html.DisplayFor(m => m.Whatever)
</div>
// etc...
}
これにより、偽造防止トークンがコントローラーに戻されます。
更新: あなたが抱えている問題は、リダイレクトを実行していることです。これを行うと、すべての値が失われます。不明なのは、あるページから別のページへのリダイレクトを行う理由です。通常、MVC では、ユーザーが認証されていないか、セッションが期限切れになった場合、login.aspx ページにリダイレクトされます。Signin.aspx が含まれている場合は、AccountController
Signing.aspx と AccountController の両方を偽造防止用にマークする必要があります。ただし、ユーザーが Signin.aspx にいる場合、プロファイル アクションが偽造防止情報を受信しないため、内部的に呼び出すreturn RedirectToAction("Profile", "WhateverController");
だけの情報が失われ、失敗します。WhateverController
サインイン プロセスは、プロファイルの HTTP GET バージョンにリダイレクトし、ユーザーにフォーム エントリを完了させ、それをプロファイルの HTTP POST バージョンに送信させる必要があります。これにより、データが保持され、偽造防止トークンが正常に到着します。