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

ASP.NET Core MVC部署IIS后POST请求报503错误(本地正常)

ASP.NET Core MVC部署IIS后所有POST请求报503错误

问题描述

本地运行ASP.NET Core MVC应用时,JavaScript的fetch POST请求可正常更新数据库;但部署到IIS后,所有POST请求均返回503 Service Unavailable错误,GET等其他请求无异常。

代码详情

JavaScript代码

负责发送POST请求的updateDatabase函数:

async function updateDatabase(data, isMaterial) {
    const url = isMaterial ? '/Projet/UpdateHistoriqueProjet?typePhaseext=true'
                           : '/Projet/UpdateHistoriqueProjet?typePhaseext=false';
    const response = await fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'RequestVerificationToken': $('input[name="__RequestVerificationToken"]').val()
        },
        body: JSON.stringify(data)
    });

    if (!response.ok) {
        throw new Error('Network response was not ok');
    }

    return response.json();
}

该函数由updateCalculationsNbrHjVHPersonel函数调用,后者负责计算并准备请求数据。

服务端代码

ASP.NET Core MVC的Action方法:

[HttpPost]
public async Task<IActionResult> UpdateHistoriqueProjet([FromBody] HistoriqueProjet updatedData, [FromQuery] bool typePhaseext)
{
    var historiqueProjet = await context.HistoriqueProjets.FindAsync(updatedData.Id);

    if (historiqueProjet != null)
    {
        // 更新计算后的字段
        historiqueProjet.Nbr = updatedData.Nbr;
        historiqueProjet.HrJr = updatedData.HrJr;
        historiqueProjet.VolumeHoraire = updatedData.VolumeHoraire;

        if (typePhaseext == false) // 人员计算逻辑
        {
            historiqueProjet.MontantTotalZnApc = (historiqueProjet.CoutHoraireZnApc * updatedData.VolumeHoraire);
            historiqueProjet.MontantTotalZnSpc = (historiqueProjet.CoutHoraireZnSpc * updatedData.VolumeHoraire);
            historiqueProjet.MontantTotalZsApc = (historiqueProjet.CoutHoraireZsApc * updatedData.VolumeHoraire);
            historiqueProjet.MontantTotalZsSpc = (historiqueProjet.CoutHoraireZsSpc * updatedData.VolumeHoraire);
            historiqueProjet.MontantTotalZexsApc = (historiqueProjet.CoutHoraireZexsApc * updatedData.VolumeHoraire);
            historiqueProjet.MontantTotalZexsSpc = (historiqueProjet.CoutHoraireZexsSpc * updatedData.VolumeHoraire);
        }
        else // 物料计算逻辑
        {
            historiqueProjet.CoutHoraireLAe = updatedData.CoutHoraireLAe;
            historiqueProjet.CoutHoraireUeAe = updatedData.CoutHoraireUeAe;
            historiqueProjet.VolumeHoraire = updatedData.VolumeHoraire;
            historiqueProjet.MontantTotalLAe = (updatedData.CoutHoraireLAe * updatedData.VolumeHoraire);
            historiqueProjet.MontantTotalUeAe = (updatedData.CoutHoraireUeAe * updatedData.VolumeHoraire);

            historiqueProjet.MontantTotal = (historiqueProjet.MontantTotal / historiqueProjet.Nbr) * updatedData.Nbr;
        }

        // 保存数据库变更
        context.Update(historiqueProjet);
        await context.SaveChangesAsync();

        // 更新关联的总计数据
        await UpdateTotalEstimationForProject(historiqueProjet.IdProjet);
        await UpdateTotalChaquePhaseAsync(historiqueProjet.IdProjet, historiqueProjet.IdPhase, historiqueProjet.OrderPhase ?? 0, typePhaseext ? 1 : 0);

        return Ok(new { success = true, message = "更新成功。" });
    }

    return NotFound(new { success = false, message = "未找到对应数据。" });
}

排查与解决方案

针对IIS部署后POST请求503的问题,按以下步骤排查:

  • 检查IIS应用池状态:打开IIS管理器,确认对应应用池处于运行状态,可尝试手动重启;同时确保应用池的.NET CLR版本设置为无托管代码(ASP.NET Core应用专属配置)。
  • 验证请求验证令牌:在浏览器开发者工具的Network标签中,检查POST请求的RequestVerificationToken请求头是否正确携带,确认页面是否正常渲染了__RequestVerificationToken隐藏字段。
  • 检查IIS请求限制:进入站点的请求筛选设置,确认未限制POST请求的内容长度或请求类型,若POST数据过大,需调整最大允许内容长度。
  • 查看日志定位问题:启用ASP.NET Core应用的Debug级别日志(修改appsettings.json配置),同时查看IIS站点日志(默认路径C:\inetpub\logs\LogFiles),获取503请求的详细错误信息。
  • 确认数据库连接权限:检查部署环境的数据库连接字符串是否正确,确保应用拥有目标数据库的读写权限。
  • 验证ASP.NET Core托管模块:确认IIS服务器已安装对应版本的ASP.NET Core托管模块,该模块负责将请求转发给ASP.NET Core应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:44:57