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 回答