如何使用Httpclientfactory类型的客户端调用用ValidateAntiForgeryToken装饰的服务器



我正在尝试合并使用GetAsync和PostAsync使用类型的httpclient编辑表单页面。一切工作,除了我的代码不调用API的ValidateAntiForgeryToken动作。网上的大多数示例都不处理httpclientfactory使用的httpcontent,而是使用httpresponse。我知道我要求的防伪令牌不见了。我如何将它附加到请求头?如何从视图中检索它?我希望尽可能少地使用Javascript。下面是我的Post请求服务的一个片段。编辑:为了它的价值,我的api是。net core和客户端是。net core mvc。

var response = await _httpclient.PostAsync("api/edit/" + id, httpcontent);
response.EnsureSuccessStatusCode(); ```

在MVC编辑视图页面中,它将使用一个隐藏文件(名为__RequestVerificationToken)来存储ValidateAntiForgeryToken,您可以使用F12开发人员工具来检查它。

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">

修改数据后,可以使用JQuery获取更新后的数据,然后使用JQuery ajax调用带有ValidateAntiForgeryToken的API方法。您可以参考我的回复中的示例代码:

如果我们在启动中自定义防伪选项。自定义RequestVerificationToken的报头名称

services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");  //configure the antiforgery service to look for the X-CSRF-TOKEN header. To prevent the cross-site request forgery.
然后,我们可以使用以下脚本:
$.ajax({
type: "POST",
url: "/Survey/Create",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: { "CategoryName": $("#CategoryName").val(), "CategoryID": $("#CategoryID").val() },
success: function (response) {
alert(response);
},
failure: function (response) {
alert(response.responseText);
},
error: function (response) {
alert(response.responseText);
}
});

此外,您还可以参考ASP中的防止跨站点请求伪造(XSRF/CSRF)攻击。网络核心。

相关内容

  • 没有找到相关文章

最新更新