3

MVC4 で問題が発生しています

@Html.AntiForgeryToken()

html ヘルパー。私の開発マシンで、プロジェクトを実行すると、(Fiddler を使用して) ヘッダーを検査すると、返されるトークンの名前は次のようになります。

__RequestVerificationToken

ただし、IIS バージョン 7.5 (Windows 2008 R2) に展開すると、トークン名は次のようになります。

__RequestVerificationToken_L2V6b3JkZXI1

これはどこで変更されていますか?アプリケーションが IIS の「ルート フォルダ」に配置されていないためですか? たとえば、私のアプリケーションはにデプロイされています

"http://myserver/myapp" instead of "http://myserver"
4

2 に答える 2

9

ソースコードを見た後、答えを見つけました:

http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.WebPages/Helpers/AntiForgeryConfig.cs

はい、私のアプリケーションはパスにデプロイされているため、以下のコードはエンコードされた同等のパスを追加します...この発見が問題を解決してくれることを願っています。

        // If the app path is provided, we're generating a cookie name rather than a field name, and the cookie names should
    // be unique so that a development server cookie and an IIS cookie - both running on localhost - don't stomp on
    // each other.
    internal static string GetAntiForgeryCookieName(string appPath)
    {
        if (String.IsNullOrEmpty(appPath) || appPath == "/")
        {
            return AntiForgeryTokenFieldName;
        }
        else
        {
            return AntiForgeryTokenFieldName + "_" + HttpServerUtility.UrlTokenEncode(Encoding.UTF8.GetBytes(appPath));
        }
    }
于 2013-08-12T20:56:07.597 に答える
1

この問題は、AntiForgeryConfig クラスを使用することで非常に簡単に解決できます。以下のリファレンスを参照してください。

https://docs.microsoft.com/en-us/dotnet/api/system.web.helpers.antiforgeryconfig?view=aspnet-webpages-3.2

Namespace:System.Web.Helpers

Global.asax ファイルの Application_Start() イベントの下に以下のコードを追加する必要があります。

if (AntiForgeryConfig.CookieName.Contains("__RequestVerificationToken"))
            {
                AntiForgeryConfig.CookieName = "__RequestVerificationToken";
            } 
于 2019-11-19T06:28:02.153 に答える