如何在一个页面中使用多个@Html.AntiForgeryToken()
?
当我把它放在远程主机上不起作用时,只在本地!
我尝试使用不同的字符串foreach伪造令牌
@Html.AntiForgeryToken("logoff_forgery")
但是当我在控制器中添加[ValidateAntiForgeryToken(Salt = "logoff_forgery")]
时,我收到以下错误
'System.Web.Mvc.ValidateAntiForgeryTokenAttribute.Salt'
'The 'Salt' property is deprecated.
To specify custom data to be embedded within the token,
use the static AntiForgeryConfig.AdditionalDataProvider property.'
D:\projects\codesan\app\CodeSan\CodeSan\Controllers\AccountController.cs
289 35 CodeSan
有谁知道如何使用静态AntiForgeryConfig.AdditionalDataProvider
?如果是,请与我分享。
答案 0 :(得分:3)
正如描述Salt
中所述,不推荐使用属性。
以下是IAntiForgeryAdditionalDataProvider
public class MyAntiForgeryAdditionalDataProvider : IAntiForgeryAdditionalDataProvider
{
public string GetAdditionalData(HttpContextBase context)
{
return GenerateTokenAndSaveItToTheDB();
}
public bool ValidateAdditionalData(HttpContextBase context, string additionalData)
{
Guid token = Guid.TryParse(additionalData, out token) ? token : Guid.Empty;
if (token == Guid.Empty) return false;
return GetIfTokenIsFoundInTheDBAndNotExpired(token);
}
private string GenerateTokenAndSaveItToTheDB()
{
var newToken = Guid.NewGuid().ToString();
//save it to the db
return newToken;
}
}
您只需在Global.asax.cs
中注册即可protected void Application_Start()
{
AntiForgeryConfig.AdditionalDataProvider = new MyAntiForgeryAdditionalDataProvider();
}