1

Web フォーム ページ ( profile.aspx ) から MVC ビュー ( signin.aspx ) にページをリダイレクトします。MVC コントローラーで[ValidateAntiForgeryToken]トークン情報を取得する必要があるのですが、MVC ビューを送信すると、「必要な偽造防止トークンが提供されていないか、無効でした」というメッセージが表示されます。を削除する[ValidateAntiForgeryToken]と、エラー メッセージは表示されなくなりますが、トークン情報は失われます。検証のためにこれらすべてのトークン情報が必要です。では、どうすればこの種の問題を修正できますか? ありがとう。

4

1 に答える 1

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 が含まれている場合は、AccountControllerSigning.aspx と AccountController の両方を偽造防止用にマークする必要があります。ただし、ユーザーが Signin.aspx にいる場合、プロファイル アクションが偽造防止情報を受信しないため、内部的に呼び出すreturn RedirectToAction("Profile", "WhateverController");だけの情報が失われ、失敗します。WhateverController

サインイン プロセスは、プロファイルの HTTP GET バージョンにリダイレクトし、ユーザーにフォーム エントリを完了させ、それをプロファイルの HTTP POST バージョンに送信させる必要があります。これにより、データが保持され、偽造防止トークンが正常に到着します。

于 2013-06-25T19:28:51.410 に答える