所需的防伪表单字段“__RequestVerificationToken”不存在用户注册时出错
我正在使用Membership.create
用户函数,然后出现以下错误,
所需的防伪表单字段“__RequestVerificationToken”不存在
我怎样才能解决这个问题?
在操作之前,您有[ValidateAntiForgeryToken]
属性。 您还应该在表单中添加@Html.AntiForgeryToken()
。
喜欢这个:
控制器
[HttpPost] [ValidateAntiForgeryToken] public ActionResult MethodName(FormCollection formCollection) { ... Code Block ... }
风景:
@using(Html.BeginForm()) { @Html.AntiForgeryToken() <input name="..." type="text" /> // rest }
在我的情况下,我在我的web.config中有这个:
<httpCookies requireSSL="true" />
但是我的项目被设置为不使用SSL。 评论这条线或build立项目总是使用SSL解决了它。
另外请确保避免不使用[HttpGet]下的[ValidateAntiForgeryToken]。
[HttpGet] public ActionResult MethodName() { .. }
即使Cookies未启用,您也会收到错误信息。
另一个可能导致这个问题的原因是(如下):如果由于某种原因,在表单中禁用了所有的input字段。 它将禁用隐藏的input字段,持有您的validation令牌。 当表单将被回发时,令牌值将会丢失,并且会产生错误信息。 所以你需要做的是重新启用包含validation令牌的input字段,一切都会好的。
确保你的控制器中有你的http属性,如:
[HttpPost]
还要在控制器中添加属性:
[ValidateAntiForgeryToken]
在你的观点你的forms,你必须写:
@Html.AntiForgeryToken();
我有Html.AntiForgeryToken(); 在代码块中没有@符号的情况下,在Razor中没有发生错误,但在运行时发生了错误。 请确保您查看@ Html.Ant的@符号,如果丢失或不符合
在我的情况下,我有这个表单提交的JavaScript:
$('form').submit(function () { $('input').prop('disabled', true); });
这是从提交的表单中删除隐藏的RequestVerificationToken。 我改变了:
$('form').submit(function () { $('input[type=submit]').prop('readonly', true); $('input[type=text]').prop('readonly', true); $('input[type=password]').prop('readonly', true); });
…它工作得很好。
在我的情况下,在web.config中cookie的不正确的域名是原因:
<httpCookies domain=".wrong.domain.com" />
如果有人因为同样的原因而遇到错误,那么我的解决scheme是:
如果你有Html.AntiForgeryToken();
将其更改为@Html.AntiForgeryToken()
在我的几个控制器上的EPiServer解决scheme中,在接受HttpGet的Index操作中有一个ContentOutputCache属性。 这些操作的每个视图都包含一个张贴到HttpPost操作的表单到相同的控制器或不同的表单。 只要我从所有这些索引操作中删除了该属性,问题就消失了。
因为这是第一次search这个:
我只有在Internet Explorer中有这个问题,并不能找出问题是什么。 长话短说,它没有保存令牌的cookie部分,因为我们的(子)域有一个下划线。 在Chrome中工作,但IE / Edge并不喜欢它。
我想分享我的,我一直在使用asp.net mvc 4与angularjs这个反forgerytoken教程 ,但它会抛出一个exception,每次我请求使用$ http.post,我想出的解决scheme只是添加'X- Requested-With':'XMLHttpRequest'到$ http.post的头部,因为它看起来像(filterContext.HttpContext.Request.IsAjaxRequest())
不能识别它为ajax,这里是我的示例代码。
App.js
var headers = { 'X-Requested-With': 'XMLHttpRequest', 'RequestVerificationToken': $scope.token, 'Content-Type': 'application/json; charset=utf-8;' };
$http({ method: 'POST', url: baseURL + 'Save/User', data: JSON.stringify($scope.formData), headers: headers }).then(function (values) { alert(values.data); }).catch(function (err) { console.log(err.data); });
SaveController
[HttpPost] [MyValidateAntiForgeryToken] public ActionResult User(UserModel usermodel) { ....