c# - 如何在 ASP.NET Core 的 HTTP GET 请求中使用 ValidateAntiForgeryToken?

标签 c# asp.net-core csrf antiforgerytoken

通常您将 ValidateAntiForgeryTokenHttpPost 一起使用,如下所示:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult ...

我想在不使用 HttpPost 的情况下使用 ValidateAntiForgeryToken,以便我可以将 token 作为 URL 参数传递。我怎样才能做到这一点?如果没有 HttpPost,它会工作吗?如果是,参数的名称是什么?

最佳答案

有了 ASP.NET Core 3.1,事情似乎变得容易多了。

您所要做的就是在 AJAX 调用中传递一个 "RequestVerificationToken" header :

let token = $('input[name="__RequestVerificationToken"]').val();
let headers = { "RequestVerificationToken": token };
$.ajax({ ..., type: 'GET', headers: headers, ... });

对于 POST 调用, token 可以作为 "__RequestVerificationToken" 字段通过主体(或 FormData)中的对象传递:

let postData["__RequestVerificationToken"] = token;
$.ajax({ ..., type: 'POST', data: postData, ... });

Controller 中的方法可以定义如下:

[ValidateAntiForgeryToken]
public IActionResult GetNotifications()
{
    var notifications = _notificationService.GetNotifications();
    return Json(notifications);
}

确保 AntiforgeryOptions.HeaderNameAntiforgeryOptions.FormFieldName 没有被修改,否则用相应的值更改上面的名称。

关于c# - 如何在 ASP.NET Core 的 HTTP GET 请求中使用 ValidateAntiForgeryToken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58664612/

相关文章:

python - Django 1.6 中的 CSRF token cookie 问题

c# - MVVM 中的绑定(bind) Validation.HasError 属性

c# - 有没有办法为每个项目进行 NuGet 包源设置?

c# - 如何使用 .NET Core 和 EF 将图像文件保存到 SQL 数据库

azure - 哪个测试运行程序可与 VSTS 和 ASP.NET Core 配合使用?

laravel - Dropzone CSRF token 不匹配 Laravel 5

wordpress - 如何将CSRF添加到wordpress中手动创建的表单?

c# - 从合约访问端点配置

c# - 让 C# 与 Python 通信的最快方法是什么?

javascript - 试图使示例在 ModalPopup 中工作 : How to use ASP. NET AJAX UpdatePanel?