You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ASP.NET Core MVC中使用Ajax调用控制器方法时出现404错误

解决ASP.NET Core MVC部署IIS后Ajax 404问题

核心原因:硬编码URL不兼容IIS虚拟目录

本地运行时网站以根站点形式启动,/Sales/GetAll能正确映射到控制器接口;但部署到IIS时若设置了应用程序别名(虚拟目录),网站实际根路径变为http://域名/别名/,硬编码的绝对路径会跳过别名直接请求根站点,导致接口找不到。

具体解决方案

1. 修正Ajax请求的URL路径

不要硬编码绝对路径,改用站点根路径拼接的方式:

  • 在Index.cshtml中注入站点根路径全局变量:
<script>
    window.siteRoot = '@Url.Content("~/")';
</script>
<script src="~/js/site.js"></script>
  • 在site.js中使用该变量拼接接口地址:
$("#btnSubmit").on("click", (event) => {
    event.preventDefault(); // 阻止表单默认提交,避免页面刷新中断请求
    $.ajax({
        url: window.siteRoot + "Sales/GetAll",
        type: "POST",
        success: async () => {
            // 处理成功逻辑
        },
        error: (xhr) => {
            console.log(xhr.statusText); // 打印错误信息方便调试
        }
    })
})

2. 阻止表单默认提交行为

按钮为type="submit",点击会触发表单提交导致页面刷新,必须通过event.preventDefault()阻止默认行为,确保Ajax请求能正常完成。

3. 验证IIS部署配置

  • 确认应用程序池的.NET CLR版本设置为无托管代码(ASP.NET Core应用必须用此配置);
  • 检查站点物理路径是否指向正确的发布文件夹,确保web.config存在且配置正常;
  • 核对控制器Action的[HttpPost]特性、方法名GetAll的拼写和大小写(IIS默认区分大小写,本地环境可能不区分)。

4. 完善控制器返回值

确保Action返回符合ASP.NET Core规范的结果类型,比如JsonResult:

public class SalesController : Controller
{
    [HttpPost]
    public async Task<IActionResult> GetAll() {
        // 业务逻辑处理
        return Json(new { data = "处理结果" });
    }
}

内容的提问来源于stack exchange,提问作者Midlaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:40:03