Hem*_*oni 136 asp.net-membership asp.net-mvc-4
我正在使用Membership.create用户功能,然后发生以下错误,
所需的防伪表单字段"__RequestVerificationToken"不存在
我怎样才能解决这个问题?
web*_*per 212
[ValidateAntiForgeryToken]在行动之前你有属性.您还应该@Html.AntiForgeryToken()在表单中添加.
Jus*_*les 75
在我的情况下,我在我的web.config中有这个:
<httpCookies requireSSL="true" />
但我的项目设置为不使用SSL.注释掉该行或设置项目以始终使用SSL解决了它.
Sub*_*kar 61
像这样:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
...
Code Block
...
}
Run Code Online (Sandbox Code Playgroud)
@using(Html.BeginForm())
{
@Html.AntiForgeryToken()
<input name="..." type="text" />
// rest
}
Run Code Online (Sandbox Code Playgroud)
Hai*_*Fan 39
另外,请确保避免在[HttpGet]下使用[ValidateAntiForgeryToken].
[HttpGet]
public ActionResult MethodName()
{
..
}
Run Code Online (Sandbox Code Playgroud)
Ege*_*rak 10
就我而言,这是由于在 webconfig 中添加requireSSL=true导致httpcookiesAntiForgeryToken 停止工作。例子:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)
为了使两者requireSSL=true都@Html.AntiForgeryToken()工作,我在Application_BeginRequestin中添加了这一行Global.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
另一件可能导致此问题的事情(刚刚遇到此问题)如下:如果由于某种原因禁用表单中的所有输入字段.它将禁用包含验证令牌的隐藏输入字段.当表单将被回发时,将丢失令牌值并将生成错误的错误.所以你需要做的是重新启用包含验证令牌的输入字段,一切都会很好.
确保在控制器中具有http属性,例如:
[HttpPost]
Run Code Online (Sandbox Code Playgroud)
还要在控制器中添加属性:
[ValidateAntiForgeryToken]
Run Code Online (Sandbox Code Playgroud)
在视图上的表单中,您必须编写:
@Html.AntiForgeryToken();
Run Code Online (Sandbox Code Playgroud)
我有Html.AntiForgeryToken(); 在代码块中没有@符号时,它在Razor中没有给出错误,但在运行时出现了。确保您查看@ Html.Ant ..的@符号。
就我而言,我在表单Submit上使用了以下javascript:
$('form').submit(function () {
$('input').prop('disabled', true);
});
Run Code Online (Sandbox Code Playgroud)
这是从提交的表单中删除隐藏的RequestVerificationToken。我将其更改为:
$('form').submit(function () {
$('input[type=submit]').prop('disabled', true);
$('input[type=text]').prop('readonly', true);
$('input[type=password]').prop('readonly', true);
});
Run Code Online (Sandbox Code Playgroud)
...而且效果很好。
我们这些人作为请求的一部分上传文件的另一种可能性.如果内容长度超过<httpRuntime maxRequestLength="size in kilo bytes" /> 并且您正在使用请求验证令牌,则浏览器将显示'The required anti-forgery form field "__RequestVerificationToken" is not present'消息而不是超出请求长度消息.
将maxRequestLength设置为足以满足请求的值可以解决当前问题 - 尽管我承认这不是一个合适的解决方案(我们希望用户知道文件大小的真正问题,而不是请求验证令牌丢失的问题).
| 归档时间: |
|
| 查看次数: |
178771 次 |
| 最近记录: |