c# - ASP.NET Core 在 json post 请求正文中传递 antiforgerytoken

标签 c# jquery ajax asp.net-core asp.net-core-mvc

好吧,我有一个通过表单 tagHelper 呈现的表单。所以它包括特殊隐藏的防伪 token 。

我正在尝试发送以下 ajax 请求:

var data = JSON.stringify(feedbackForm.serializeArray().reduce((res, item) => {
       res[item.name] = item.value;
       return res; }, {}));
 // data example: '{"Description":"some description", "__RequestVerificationToken":"CfDJ8F9f8kTKlVNEsnTxejQIJ__pRCl2CuZTQDVAY2216J7GgHWGDC0XUMPc0FKHpr_K5uhz8Kx0VeHDkIPdQ3V0Xur9oLE2u_bpfXuVss6AWX3BVh0WbwfQriaibOrf_yvEuIYZV-jHU_G-AHPD91cKz_QE7MVmeLVgTum80yTb8biGctMtJcU67Wp7ZgN86yMuew"}'` 
  $.ajax({
         type: "POST",
         url: '@Url.Action("Feedback", "Profile", new {Area = ""})',
         contentType: "application/json; charset=utf-8",
         data: data,
         dataType: "json"
  });

Controller Action 看起来像这样:

 [HttpPost]
 [AllowAnonymous]
 [ValidateAntiForgeryToken]
 public async Task<IActionResult> Feedback([FromBody]FeedbackViewModel vm)
 {
    ...
 }

所以发布数据包含防伪 token 的 key ,但是请求仍然没有通过防伪验证并且因错误而失败。如果我从 Controller 中删除防伪验证属性,它就可以正常工作。

为什么它不检查请求正文中的 token - 是设计使然,还是某种问题?

最佳答案

你能尝试像下面这样实现吗?

data["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
var data = JSON.stringify(feedbackForm.serializeArray().reduce((res, item) => {
   res[item.name] = item.value;
   return res; }, {}));

$.ajax({
    url: '@Url.Action("Feedback", "Profile", new {Area = ""})',
    contentType: "application/json"
    type: 'POST',
    context: document.body,
    data: data,
    success: function() { refresh(); }
});

关于c# - ASP.NET Core 在 json post 请求正文中传递 antiforgerytoken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635207/

相关文章:

C# TabControl - 是否可以将 "disable"设置为单个 TabPages?

c# - 如何在重定向页面之前获取警报消息

javascript - 隐藏 <article> 如果有一个空的 src""with jquery

javascript - 如何通过 ajax 将 javascript 对象发送到 php?

php - 如果他或她的密码不正确,如何重定向并通知用户?

c# - 从 C++ 调用 (C#) .NET Core 方法

c# - 从 SQL 表中将项目插入到 Bootstrap 下拉列表中

jquery - Jstree 在加载时打开特定分支

javascript - 从变量中获取动态 ID 值

javascript - JQuery 追加 AJAX