如何解决ASP.NET Core 6部署到IIS时的HTTP Error 403.14 - Forbidden错误
解决ASP.NET Core 6 MVC发布到IIS的403.14及进程启动失败问题
一、修正HTTP Error 403.14 - Forbidden错误
403.14本质是IIS未正确将请求转发给ASP.NET Core模块,不要手动编写web.config,正确操作是:
- 发布项目时选择文件系统作为目标,确保勾选「生成web.config」选项(VS默认已勾选)。自动生成的配置会包含适配IIS的
AspNetCoreModuleV2设置,以及明确指向应用dll的路径,而非开发环境专用的变量。 - 若已手动添加web.config,先删除该文件,重新发布生成默认配置。
二、解决进程启动失败与端口绑定问题
事件查看器的错误核心是%LAUNCHER_PATH%和%LAUNCHER_ARGS%仅适用于VS开发环境,IIS无法识别这两个变量,导致进程找不到启动入口,端口绑定失败是衍生问题。按以下步骤修复:
- 修正web.config配置:如果必须手动维护配置,替换变量为实际启动参数,示例如下(将
YourMvcApp.dll替换为你项目的dll名称):
<configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\YourMvcApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </configuration>
- 检查服务器依赖:确保服务器安装了与.NET 6匹配的ASP.NET Core Runtime和AspNetCoreModuleV2。可通过命令
dotnet --list-runtimes查看已安装版本,若缺失,安装对应版本的托管捆绑包(Hosting Bundle),它会自动配置IIS模块。 - 调整应用程序池设置:
- 将应用程序池的**.NET CLR版本**设为「无托管代码」(ASP.NET Core为自托管模式,无需IIS托管运行时)。
- 确保应用程序池身份拥有发布目录(
D:\publish)的读写权限,尤其是日志目录(若开启了stdoutLogEnabled)。可临时将身份改为LocalSystem测试(生产环境不建议),或给对应身份添加目录权限。
- 验证端口问题:若进程能正常启动后仍提示端口占用,用命令
netstat -ano | findstr :44162查看占用端口的进程,结束进程或调整应用端口配置(ASP.NET Core在IIS下默认通过反向代理处理,一般无需手动指定端口)。
三、额外排查手段
- 开启标准输出日志:将web.config中
stdoutLogEnabled设为true,确保logs目录存在且有写入权限,启动应用后查看日志文件,可获取进程启动失败的具体原因(如dll缺失、配置文件错误等)。 - 直接启动测试:在服务器命令行进入
D:\publish目录,执行dotnet YourMvcApp.dll,若启动失败,命令行会直接输出错误信息,针对性修复即可。
内容的提问来源于stack exchange,提问作者R.S
相关产品推荐
相关产品推荐

