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
相关产品推荐
相关产品推荐

