啓用防僞令牌和我有Ajax調用:與ASP.NET核心和JQuery
$("#send-message").on("submit", function (event) {
event.preventDefault();
var $form = $(this);
$.ajax({
url: "api/messages",
data: JSON.stringify($form.serializeToJSON()),
dataType: "json",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
type: "post"
})
.done(function (data, status, xhr) { })
.fail(function (xhr, status, error) { });
到ASP.NET核心作用:
[HttpPost("messages")]
public async Task<IActionResult> Post([FromBody]MessagePostApiModelModel model) {
// Send message
}
形式是在共享視圖,它是:
<form id="send-question" method="post">
<textarea name="content"></textarea>
<button class="button" type="submit">Enviar</button>
</form>
當我提交表單我得到的錯誤:
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The required antiforgery header value "RequestVerificationToken" is not present.
如何使用JQuery Ajax調用啓用ASP.NET Core的AntiForgeryToken?
UPDATE
我需要將以下ASP-控制器和ASP的操作添加到形式:
<form asp-controller="QuestionApi" asp-action="Post" id="send-question" method="post">
</form>
這將生成防僞標記。我需要手動添加標記到JQuery調用的標頭,如下所示:
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
"RequestVerificationToken": $form.find("input[name='af_token']").val()
},
有沒有更好的方法來做到這一點?
如何解決這個問題,當沒有形式,我只有一個A標籤,當點擊使Ajax調用?我可以在我的頁面頭上生成一個通用的防僞標記,以供來自該頁面的所有ajax調用使用嗎?
您的表單是否使用表單標籤助手生成服務器端?如果是這種情況,令牌已經作爲[隱藏輸入](http://stackoverflow.com/questions/30959972/html-antiforgerytoken-still-required)字段自動生成,所以它將被包含在' form.serializeToJSON'。無論答案如何,您還需要控制器操作中的[ValidateAntiForgeryToken]屬性。 –
@ DanielJ.G。它是生成服務器端,但我沒有使用asp-controller和asp-action,因爲我使用JQuery提交它。我只是更新我的問題。我錯過了什麼嗎? –
我需要在我的JQuery調用中手動添加以下頭文件:頭文件:{「RequestVerificationToken」:$ form.find(「input [name ='af_token]」)。val() },...有更好的辦法? –