AntiForgeryToken导致重定向循环

时间:2014-01-25 12:26:38

标签: c# asp.net-mvc html-helper antiforgerytoken

所以我的页面上有一个非常简单的表格,看起来像这样

@using(Html.BeginForm("SomeAction", "SomeController", FormMethod.Post))
{
    Html.AntiForgeryToken();

    // some other fields go here

    <input type="submit" value="DoStuff" />
}

并且操作看起来像这样

[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult SomeAction()
{
    // Do some stuff here and return
}

首先,如果我没有为AntiForgeryToken方法提供salt参数,它不会生成任何隐藏字段或类似包含令牌的内容,因此单击该提交按钮会重定向到错误页面, required anti forgery field is not present。现在,如果我在那里放任何盐,例如用户名

Html.AntiForgeryToken(User.Identity.Name); // I Use FormsAuthentication

然后浏览器说,网页有一个重定向循环。这是我第一次使用AntiForgeryToken,所以我不明白为什么会这样。谁能帮我吗。任何帮助都会得到满足。

1 个答案:

答案 0 :(得分:2)

以下Html扩展程序:

@Html.AntiForgeryToken()

即使没有将盐作为参数传递,也始终生成隐藏字段。 MVC的反CSRF功能实际上取决于两个令牌:一个是隐藏的表单元素,另一个是cookie。因此,Html.AntiForgeryToken()帮助程序不会返回HTML代码段。它还具有设置此cookie的副作用。所以你需要确保启用了cookie。

除了无参数的方法之外,该方法的任何其他重载都已过时: http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.antiforgerytoken(v=vs.118).aspx