【发布时间】:2022-01-20 04:59:40
【问题描述】:
我有这个问题:
我正在使用带有 MVC 的 .NET 6,并且正在使用 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。请求网址似乎正确 - 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 controller, AJAX GET works, but POST does not (404) 但对我来说似乎不是这样。
【问题讨论】:
-
问题出在路由部分。不在这里
-
如果我将方法更改为 Get 并放置一个属性 [HttpGet] 它会返回正确的结果。
-
所以在你的路由器中,你不会为 POST 请求处理这个地址。只需在路由器部分编辑附加到此 URL 的方法
-
我只使用默认路由:endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");我尝试使用 [Route("appointment/generateSlots")] 属性,但都一样。
-
你能试试 GenerateSlots([FromBody] AppointmentSlotInputModel model) 吗?
标签: javascript c# ajax asp.net-core .net-6.0