我们有一个用ASP.NET MVC 3编写的应用程序,它使用@Html.AntiForgeryToken()
。
我们希望在自定义属性中验证令牌(无需指定默认属性[ValidateAntiForgeryToken]
)。这应该是非常简单的,但我发现了一个有趣的不一致。
以下所有代码均在以下方法中运行:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ValidateJsonAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
...
AntiForgeryConfig.CookieName
值为__RequestVerificationToken
。这似乎有道理。
filterContext.HttpContext.Request.Cookies
包含1个Cookie - 但其名称为__RequestVerificationToken_Lw__
。
问题:不是那两个应该是相同的,所以我可以使用以下代码段来获取Cookie吗?
var cookie = filterContext.HttpContext.Request.Cookies[AntiForgeryConfig.CookieName];
答案 0 :(得分:2)
默认cookie名称在MVC 3和MVC 4之间更改。在MVC 3中,默认cookie名称包含“Lw”,并且在末尾附近有额外的下划线。你能否确认这个cookie是由MVC 4应用程序而不是MVC 3应用程序生成的?