未找到 MVC 4 防伪
MVC 4 Anti-Forgery Not Found
我的表格看起来像
@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.
操作 link 向服务器执行 GET
请求。在 GET
请求期间,不传递任何表单字段,包括 AntiForgeryToken 的隐藏字段。这就是您收到错误的原因。 AntiForgeryTokens 仅在将信息发布回您的服务器时起作用,而不适用于基本 GET
请求。
Here is the MSDN 用于 AntiForgeryToken 助手。请注意,这是状态:
Generates a hidden form field (anti-forgery token) that is validated
when the form is submitted.
为了传递 AntiForgeryToken,您需要 POST
/提交表格。更改以下内容,一切都应按预期工作。
@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 的 Post-Redirect-Get 模式。 HttpPost ActionResult
中的 return 应该是 return RedirectToAction("Something")
而不是视图。
[ValidateAntiForgeryToken]
在 POST
操作上验证,而不是在 GET
上验证。因此,您的代码应如下所示:
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<!-- Some form inputs -->
<input type="submit" value="Submit" />
}
以及您的操作方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MyAction()
{
return View();
}
我的表格看起来像
@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.
操作 link 向服务器执行 GET
请求。在 GET
请求期间,不传递任何表单字段,包括 AntiForgeryToken 的隐藏字段。这就是您收到错误的原因。 AntiForgeryTokens 仅在将信息发布回您的服务器时起作用,而不适用于基本 GET
请求。
Here is the MSDN 用于 AntiForgeryToken 助手。请注意,这是状态:
Generates a hidden form field (anti-forgery token) that is validated when the form is submitted.
为了传递 AntiForgeryToken,您需要 POST
/提交表格。更改以下内容,一切都应按预期工作。
@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 的 Post-Redirect-Get 模式。 HttpPost ActionResult
中的 return 应该是 return RedirectToAction("Something")
而不是视图。
[ValidateAntiForgeryToken]
在 POST
操作上验证,而不是在 GET
上验证。因此,您的代码应如下所示:
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<!-- Some form inputs -->
<input type="submit" value="Submit" />
}
以及您的操作方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MyAction()
{
return View();
}