gpt4 book ai didi

asp.net-mvc - 发布到 Razor 页面时出现 400 错误请求

转载 作者:行者123 更新时间:2023-12-04 11:09:30 24 4
gpt4 key购买 nike

我的页面有...

@page "{candidateId:int}"

... 和
@Html.AntiForgeryToken()

模型有...
public void OnGet(int candidateId)
{

}

public void OnPost(int candidateId)
{

}

GET 工作正常。这是我的 AJAX 请求..
$.ajax({
type: "POST",
url: "/Skills/" + candidateId,
beforeSend: function (xhr) {

xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: {

name: 'hi mum'
},

success: function (response) {
},
failure: function (response) {

alert(response);
}
});

浏览器收到无用的错误消息... 400 错误请求。

我错过了什么?

最佳答案

您收到 400(错误请求)响应,因为框架需要 RequestVerificationToken作为已发布请求的一部分。框架使用它来防止可能的 CSRF 攻击。如果您的请求没有此信息,框架将返回 400 bad request。您当前的代码未发送。

把代码改成这样

headers:
{
"RequestVerificationToken": $('input:hidden[name="__RequestVerificationToken"]').val()
},

这将添加一个带有 key RequestVerificationToken 的新项目到请求 header ,框架不应在调用时抛出 400 响应。 (假设您的 View 代码为 __RequestVerificationToken 隐藏输入生成了隐藏输入)

您可以通过注入(inject) IAntiforgery 使代码更加健壮。实现 View /页面并使用 GetAndStoreTokens方法。
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
@functions{
public string GetAntiXsrfRequestToken()
{
return Xsrf.GetAndStoreTokens(Model.HttpContext).RequestToken;
}
}

并调用此 GetAntiXsrfRequestToken获取javascript中的值的函数
headers:
{
"RequestVerificationToken": '@GetAntiXsrfRequestToken()'
},

您可能还想使用 PageModel 的 CandidateId用于创建 url 的属性。像这样的东西
url: "/Skills/@Model.CandidateId",

此外,您确实需要调用 @Html.AntiForgeryToken()方法显式生成 token 输入。具有没有 action 属性值的带有 post 方法的表单将为您生成隐藏的输入。
<form method="post">
<!-- your inputs-->
</form>

关于asp.net-mvc - 发布到 Razor 页面时出现 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48373229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com