我使用以下代码创建了一个简单的MVC4应用程序:
控制器:
[AllowAnonymous]
[HttpGet]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model)
{
return View();
}
查看:
<div>
@using (Html.BeginForm("Login","Administrator",FormMethod.Get))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
@Html.LabelFor(x=>x.username)
@Html.TextBoxFor(x=>x.username)
@Html.LabelFor(x=>x.password)
@Html.TextBoxFor(x=>x.password)
<input type="submit" value="Submit" />
}
</div>
运行应用程序并转到此地址后:http://xxx/Administrator/Login
我收到了这个错误:
The required anti-forgery cookie "__RequestVerificationToken" is not present.
这有什么问题?
答案 0 :(得分:3)
当你的请求是GET请求时,防伪令牌在POST上是有意义的。
您应该有Login
方法只显示登录屏幕(HttpGet
)和另一种接受发布值(HttpPost
)的方法。
只显示值的那个不将模型作为参数,而应该只创建一个空模型。
两种方法都可以呈现相同的视图。