Razor Pages自动生成并验证防伪令牌以防止CSRF攻击。由于您没有在AJAX回调中发送任何令牌,因此请求失败。
要解决此问题,您将必须:
- 注册防伪服务
- 将令牌添加到您的请求中
- 通过添加
<form>
或直接使用@Html.AntiForgeryToken
HtmlHelper 将防伪令牌添加到您的页面
1.在您的帐户中注册防伪服务 Startup.cs
public void ConfigureServices(IServiceCollection services){ services.AddRazorPages(); services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");}2.修改您的AJAX回调
在AJAX回调中,我们添加了其他代码,以
XSRF-TOKEN与请求标头一起发送。
$.ajax({ type: "POST", url: '/?handler=YOUR_CUSTOM_HANDLER', // Replace YOUR_CUSTOM_HANDLER with your handler. contentType: "application/json; charset=utf-8", beforeSend: function (xhr) { xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); }, dataType: "json"}).done(function (data) { console.log(data.result);})3.将防伪令牌添加到您的页面
您可以通过添加来完成此操作
<form>:
<form method="post"> <input type="button" value="Ajax test" onclick="ajaxTest();" /></form>
或使用
@Html.AntiForgeryToken:
@Html.AntiForgeryToken()<input type="button" value="Ajax test" onclick="ajaxTest();" />
在这两种情况下,Razor页面都会在页面加载后自动添加一个包含防伪令牌的隐藏输入字段:
<input name="__RequestVerificationToken" type="hidden" value="THE_TOKEN_VALUE" />



