我试图在ASP.NET MVC3应用程序中验证Antiforgery令牌。我的代码如下:
void ValidateRequestHeader(HttpRequestMessage request)
{
string cookieToken = "";
string formToken = "";
IEnumerable<string> tokenHeaders;
if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
{
string[] tokens = tokenHeaders.First().Split(':');
if (tokens.Length == 2)
{
cookieToken = tokens[0].Trim();
formToken = tokens[1].Trim();
}
}
//Validation
AntiForgery.Validate(cookieToken, formToken);
}
Antiforgery.Validate函数似乎不起作用并显示以下错误:
The best overloaded method match for System.Web.Helpers.AntiForgery.Validate(System.Web.HttpContextBase, string)' has some invalid arguments
但是,在MSDN上,该函数作为重载函数之一存在。这是参考错误吗?我正在使用System.Web.Helpers命名空间。
答案 0 :(得分:2)
使用虚拟项目的快速测试告诉我, ASP.NET MVC3 NOT 有方法AntiForgery.Validate(string, string)
。它只有:
System.Web.Helpers.AntiForgery.Validate()
System.Web.Helpers.AntiForgery.Validate(System.Web.HttpContextBase, string)
您可能希望升级项目或更改:
AntiForgery.Validate(cookieToken, formToken);
到
AntiForgery.Validate(this.HttpContext, formToken); // I hope that the correct httpcontext, you might wanna check though.