【问题标题】:how to include AntiForgeryToken in an ajax action link in mvc?如何在 mvc 的 ajax 操作链接中包含 AntiForgeryToken?
【发布时间】:2015-06-25 23:17:30
【问题描述】:

我有以下代码:

@Ajax.ActionLink("Delete", "Delete", 
new { id = item.ID, RequestVerificationToken=*What comes here?*}, 
new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "formsIndex" })

我想将验证令牌添加到链接而不在客户端使用 javascript,这似乎是一种多余的依赖,因为我已经在服务器中拥有该值。有没有合适的方法来做到这一点?

【问题讨论】:

  • 创建一个表单 (Ajax.BeginForm()) 并包含 @Html.AntiForgeryToken()

标签: ajax asp.net-mvc security razor csrf


【解决方案1】:

来自MSDN documentation(我的重点)

HtmlHelper.AntiForgeryToken 方法

生成一个隐藏的表单字段(防伪令牌),在提交表单时验证该字段。

您需要一个表单元素来生成防伪令牌。

@Ajax.BeginForm("Delete", new { id = item.ID }, new AjaxOptions { UpdateTargetId = "formsIndex" }))
{
  @Html.AntiForgeryToken()
  <input type="submit" value="Delete" /> // style to look like a link if that's what you want
}

【讨论】:

  • 谢谢。它按预期工作,尽管我希望有一个更漂亮的解决方案。在创建 AntiForgeryToken hiddin 字段时,视图引擎会访问令牌值,似乎应该有一种方法可以在没有输入元素环绕它的情况下访问它
  • 最终我解析了输入元素并提取了令牌,才意识到没有办法发布消息,这意味着通过操作链接传递数据的唯一方法,无论它是否获取或 post,带有 url 参数,它不适用于 AntiForgeryToken。这意味着没有更好的选择。
猜你喜欢
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
相关资源
最近更新 更多