AJAX POST 请求 returns 404 .NET 6

AJAX POST request returns 404 .NET 6

我有这个问题:

我正在将 .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 未找到。请求 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?}");
});

编辑:我在这里找到了一个类似的线程 - 但是我好像不是这样。

所以我找到了我的解决方案。在我的 Startup.cs 我有这个代码:

    services.AddAntiforgery(options =>
    {
        options.HeaderName = "X-CSRF-TOKEN";
    });

而来自控制器的 BadRequest 是由于 AntiForgeryToken 验证而来的。在我的 AJAX 调用中,我对 AF 令牌的 header 是错误的:它是 'RequestVerificationToken',但它应该是 'X-CSRF-TOKEN' 或相反。但现在我仍然得到了正确的结果,不再有 BadRequest。