首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC 4防伪未被发现

MVC 4防伪未被发现
EN

Stack Overflow用户
提问于 2015-01-06 15:34:14
回答 2查看 2K关注 0票数 0

我有个表格看起来像

代码语言:javascript
运行
复制
@using(Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <!-- Some form inputs -->

    <div>@Html.ActionLink("LinkText", "MyAction")</div>
}

我的行动定义如下:

代码语言:javascript
运行
复制
[ValidateAntiForgeryToken}
public ActionResult MyAction()
{
    return View();
}

当我点击操作链接时,我得到的是错误:The required anti-forgery form field "__RequestVerificationToken" is not present.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-06 15:37:45

操作链接对服务器执行GET请求。在GET请求期间,不传递表单字段,包括AntiForgeryToken的隐藏字段。这就是为什么你要得到错误。AntiForgeryTokens只在POSTing信息返回到服务器时才能工作,而不适用于基本的GET请求。

这是MSDN用于AntiForgeryToken助手。请注意,这是说:

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

为了传递AntiForgeryToken,需要对表单进行POST/submit。更改以下内容,所有操作都应按预期工作。

代码语言:javascript
运行
复制
@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"),而不是视图。

票数 1
EN

Stack Overflow用户

发布于 2015-01-06 15:38:47

ValidateAntiForgeryToken

POST操作上验证,而不是使用GET验证。所以,您的代码应该如下所示:

代码语言:javascript
运行
复制
@using(Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <!-- Some form inputs -->

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

你的行动方法:

代码语言:javascript
运行
复制
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MyAction()
{
    return View();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27801919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档