AJAX 调用适用于 GET 但不适用于 POST
AJAX call works with GET but not with POST
以下 AJAX 调用对我有效。
CSHTML
$.ajax({
url: '?handler=Delete',
data: {
id: $(this).data('id')
},
});
CS
public void OnGetDelete(int id)
{
}
但是如果我按如下方式更改它,则会出现 400 错误。
CSHTML
$.ajax({
type: 'POST',
url: '?handler=Delete',
data: {
id: $(this).data('id')
},
});
CS
public void OnPostDelete(int id)
{
}
Post 在这里对我来说更有意义。我如何将其设为 post?
Razor 页面旨在自动防止跨站点请求伪造 (CSRF/XSRF) 攻击。
请求失败,因为页面上没有 AntiForgeryToken。
解决方案:
1)尝试添加:
@Html.AntiForgeryToken()
在您的 .cshtml 页面顶部。当您执行此操作时,razor 页面将添加一个名为 __RequestVerificationToken 的隐藏输入,其中包括您的请求令牌。
2) 更改您的 ajax 请求并添加此内容。
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
3) 在您的 ConfigureServices 方法中配置防伪造
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
}
之后,您将不会再收到 400 错误。
参考:https://www.talkingdotnet.com/handle-ajax-requests-in-asp-net-core-razor-pages/
以下 AJAX 调用对我有效。
CSHTML
$.ajax({
url: '?handler=Delete',
data: {
id: $(this).data('id')
},
});
CS
public void OnGetDelete(int id)
{
}
但是如果我按如下方式更改它,则会出现 400 错误。
CSHTML
$.ajax({
type: 'POST',
url: '?handler=Delete',
data: {
id: $(this).data('id')
},
});
CS
public void OnPostDelete(int id)
{
}
Post 在这里对我来说更有意义。我如何将其设为 post?
Razor 页面旨在自动防止跨站点请求伪造 (CSRF/XSRF) 攻击。
请求失败,因为页面上没有 AntiForgeryToken。
解决方案:
1)尝试添加:
@Html.AntiForgeryToken()
在您的 .cshtml 页面顶部。当您执行此操作时,razor 页面将添加一个名为 __RequestVerificationToken 的隐藏输入,其中包括您的请求令牌。
2) 更改您的 ajax 请求并添加此内容。
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
3) 在您的 ConfigureServices 方法中配置防伪造
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
}
之后,您将不会再收到 400 错误。
参考:https://www.talkingdotnet.com/handle-ajax-requests-in-asp-net-core-razor-pages/