ASP.Net Core 6 Razor Pages中$.ajax请求404问题排查及路径咨询
ASP.NET Core 6 Razor Pages AJAX POST 404问题排查与正确路径
问题根源回顾
你遇到的404错误核心原因是应用部署的根路径不是域名根目录,IIS Express设置的应用URL是localhost:64373/Lab,所有请求路径都需要带上/Lab前缀,之前的URL都遗漏了这部分,导致路由无法匹配到目标处理方法。
排查此类路径问题的方法
- 确认应用根路径:
- 查看
Properties/launchSettings.json文件,找到iisSettings下的applicationUrl,确认完整的根路径(比如你的是https://localhost:64373/Lab)。 - 在浏览器开发者工具的Network标签里,查看请求的完整URL,对比实际应该请求的路径,就能快速发现前缀缺失的问题。
- 查看
- 验证路由规则:
Razor Pages的handler方法路由规则是:{根路径}/{页面相对路径}?handler={方法名(去掉OnPost/OnGet前缀)}。比如你的OnPostUpdateList方法,对应的handler名称是UpdateList。 - 避免硬编码路径:
不要直接写死URL,优先用Razor的URL辅助方法生成路径,自动适配根路径。
正确的请求路径写法
方法1:使用Url.Page生成正确路径(推荐)
在Razor视图里,用Url.Page方法生成带根路径的URL,自动处理Lab前缀:
$.ajax({ type: "POST", url: '@Url.Page("/PCL/PCL_Index", "UpdateList")', data: { listId: listId, itemName: itemName, isRemoving: isRemovingChecked }, success: function (result) { if (result.success) { console.log(result); } else { alert("Error: " + result.errorMessage); } }, error: function (xhr, status, error) { alert(error); } });
解释:
/PCL/PCL_Index是页面的相对路径(对应\Pages\PCL\PCL_Index.cshtml)。"UpdateList"是handler名称,对应后台的OnPostUpdateList方法(去掉OnPost前缀)。
方法2:手动补全根路径
如果要硬编码路径,必须加上/Lab前缀:
url: "/Lab/PCL?handler=UpdateList"
或者相对路径写法(适合当前页面在PCL目录下的情况):
url: "?handler=UpdateList"
额外注意事项
- 虽然你加了
[IgnoreAntiforgeryToken],但生产环境建议保留防伪验证,在AJAX请求里带上防伪令牌:
在视图里添加:
然后AJAX请求里加入:@Html.AntiForgeryToken()headers: { RequestVerificationToken: $('input[name="__RequestVerificationToken"]').val() } - 后台方法建议返回
IActionResult或JsonResult,方便返回状态和数据:public IActionResult OnPostUpdateList(int listId, string itemName, bool isRemoving) { // 业务逻辑处理 return Json(new { success = true }); }
内容的提问来源于stack exchange,提问作者DeveloperDan
相关产品推荐
相关产品推荐

