我有个表格看起来像
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<!-- Some form inputs -->
<div>@Html.ActionLink("LinkText", "MyAction")</div>
}我的行动定义如下:
[ValidateAntiForgeryToken}
public ActionResult MyAction()
{
return View();
}当我点击操作链接时,我得到的是错误:The required anti-forgery form field "__RequestVerificationToken" is not present.
发布于 2015-01-06 15:37:45
操作链接对服务器执行GET请求。在GET请求期间,不传递表单字段,包括AntiForgeryToken的隐藏字段。这就是为什么你要得到错误。AntiForgeryTokens只在POSTing信息返回到服务器时才能工作,而不适用于基本的GET请求。
这是MSDN用于AntiForgeryToken助手。请注意,这是说:
生成一个隐藏的表单字段(防伪造令牌),该字段在表单提交时得到验证。
为了传递AntiForgeryToken,需要对表单进行POST/submit。更改以下内容,所有操作都应按预期工作。
@using(Html.BeginForm("MyAction", "MyController"))
{
@Html.AntiForgeryToken()
<!-- Some form inputs -->
<div><input type="submit" value="MyText"/></div>
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MyAction()
{
return View();
}但是,我想指出的是,上面的代码更改打破了MVC的后重定向-获取模式。从HttpPost ActionResult返回的应该是返回RedirectToAction("Something"),而不是视图。
https://stackoverflow.com/questions/27801919
复制相似问题