我有這個問題:
我正在使用 .NET 6 和 MVC,我正在使用 FullcalendarIo。我有一個控制器可以在日歷中制作空閑插槽。這是控制器中的代碼:
[Authorize(Roles = DoctorRoleName)]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task < ActionResult < AppointmentSlotInputModel >> GenerateSlots(AppointmentSlotInputModel model) {
//await this.appointmentService.GenerateSlots(model.Start, model.End, model.SlotDurationMinutes);
return Json("Hello");
}
這是我發出 POST 請求的 JS 代碼
const params = {
start: startDate,
end: endDate,
slotDurationMinutes: scale
};
const response = await fetch('/Appointment/GenerateSlots', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'RequestVerificationToken': document.getElementById("RequestVerificationToken").value
},
body: JSON.stringify(params)
});
在網路選項卡中,對 /Appointment/GenerateSlots 的請求我得到第一個代碼 302 - 重定向,然后是 404 Not Found。請求 url 似乎正確 - https://localhost:44376/Appointment/GenerateSlots。
f 我將方法更改為 GET 并將 [HttpGet] 屬性放在控制器中的操作上方,我得到了 JSON 結果。在 Startup.cs 我使用這些:
services.AddAntiforgery(options => {
options.HeaderName = "X-CSRF-TOKEN";
});
services.Configure < CookiePolicyOptions > (options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
但是,如果我將它們注釋掉,結果是相同的 - 先是 302,然后是 404。我已經嘗試了很多在網站上為有類似問題的人撰寫的代碼,但沒有幫助。我哪里錯了?我正在使用標準路由:
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
編輯:我在這里找到了一個類似的執行緒 - ASP.NET 控制器,AJAX GET 作業,但 POST 沒有(404) 但對我來說似乎不是這種情況。
uj5u.com熱心網友回復:
所以我找到了我的解決方案。在我的 Startup.cs 我有這個代碼:
services.AddAntiforgery(options =>
{
options.HeaderName = "X-CSRF-TOKEN";
});
來自控制器的 BadRequest 是因為 AntiForgeryToken 驗證而出現的。在我的 AJAX 呼叫中,我的 AF 令牌標頭是錯誤的:它是“RequestVerificationToken”,但它應該是“X-CSRF-TOKEN”或其他方式。但現在我仍然有正確的結果,不再有 BadRequest。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388235.html
標籤:javascript C# 阿贾克斯 asp.net核心 .net-6.0
