ASP.NET MVC 防伪令牌 (CSRF) 不工作
ASP.NET MVC anti-forgery token (CSRF) not working
我正在尝试将 CSRF 令牌实施到我的代码中,但到目前为止还没有成功。我认为分为三个步骤:
我要发送的表单代码:
@using (Html.BeginForm("Manage", "Account"))
{
@Html.AntiForgeryToken()
}
在我的控制器视图中,我写了:
public class HomeController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index()
{
return View("Table");
}
etc...
}
和我的 ajax 通话:
$.ajax({
type: "POST",
url: "../Home/" + sFunction,
contentType: "application/json; charset=utf-8",
processData: false,
dataType: "json",
headers: { "__RequestVerificationToken":
$('input[name=__RequestVerificationToken]').val() },
data: data === null ? null : JSON.stringify(data),
等等
我错过了什么?为什么它不起作用?
谢谢
[ValidateAntiForgeryToken]
需要修饰您的表单 post 方法。不是您的索引 GET 方法。在这种情况下...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Manage(YourViewModel model)
{
//do your logic
return View(//whatever route & model)
}
然后在您的 js 中将其添加到您的数据对象中。
let form = //get your form control here
let data = $(form).serialize();//form is your form control
data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();
$.ajax({
type: "POST",
url: //controller/action,
contentType: "application/x-www-form-urlencoded",
processData: false,
dataType: "json",
data: JSON.stringify(data),
//etc....
});
我正在尝试将 CSRF 令牌实施到我的代码中,但到目前为止还没有成功。我认为分为三个步骤:
我要发送的表单代码:
@using (Html.BeginForm("Manage", "Account"))
{
@Html.AntiForgeryToken()
}
在我的控制器视图中,我写了:
public class HomeController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index()
{
return View("Table");
}
etc...
}
和我的 ajax 通话:
$.ajax({
type: "POST",
url: "../Home/" + sFunction,
contentType: "application/json; charset=utf-8",
processData: false,
dataType: "json",
headers: { "__RequestVerificationToken":
$('input[name=__RequestVerificationToken]').val() },
data: data === null ? null : JSON.stringify(data),
等等
我错过了什么?为什么它不起作用? 谢谢
[ValidateAntiForgeryToken]
需要修饰您的表单 post 方法。不是您的索引 GET 方法。在这种情况下...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Manage(YourViewModel model)
{
//do your logic
return View(//whatever route & model)
}
然后在您的 js 中将其添加到您的数据对象中。
let form = //get your form control here
let data = $(form).serialize();//form is your form control
data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();
$.ajax({
type: "POST",
url: //controller/action,
contentType: "application/x-www-form-urlencoded",
processData: false,
dataType: "json",
data: JSON.stringify(data),
//etc....
});