.NET 6升级后发布ASP.NET应用出现403错误的排查求助
.NET 6升级后ASP.NET应用发布403错误排查方向
1 服务器站点权限配置
- 检查站点根目录的访问权限:确认应用程序池运行身份(比如IIS的IUSR、应用程序池标识用户)对发布后的文件夹有读取&执行权限,.NET 6的默认发布模式如果是单文件/自包含,对目录权限的校验逻辑比.NET 5更严格
- 检查IIS站点的身份验证配置:确认你启用了应用需要的身份验证方式(比如匿名身份验证、Forms认证等),升级后有可能IIS的站点配置被重置,默认关闭了匿名认证会直接返回403
- 查看应用程序池的.NET CLR版本配置:如果是托管模式运行,确认CLR版本设置为
无托管代码,.NET Core/.NET 5+都不需要选CLR版本,错误设置为v4.0会触发权限校验错误返回403
2 应用程序配置检查
- 检查
Program.cs里的静态文件中间件配置:.NET 6的极简API模板默认的静态文件配置路径和.NET 5的经典模板有差异,确认你是否显式指定了UseStaticFiles的根目录,没有正确配置的话访问静态资源会返回403 - 检查授权中间件的顺序:确认
UseAuthorization、UseAuthentication的顺序在路由匹配之后、端点执行之前,.NET 6对中间件顺序的校验更严格,顺序错误会导致全局授权校验逻辑提前触发,未登录用户访问公开接口直接返回403 - 检查
appsettings.json里的路径配置:如果你配置了自定义的资源访问路径、虚拟目录映射,确认路径和服务器上的实际路径一致,.NET 6的路径大小写校验(尤其是Linux服务器)比.NET 5更严格,路径不匹配会触发403 - 检查是否开启了目录浏览功能:如果你是直接访问站点根目录且没有配置默认文档,.NET 6默认关闭目录浏览,会直接返回403,需要显式调用
UseDirectoryBrowser开启该功能
3 发布配置检查
- 检查发布模式:确认你没有误选
独立部署后没有给目录足够的权限,或者选了框架依赖但服务器上的Hosting Bundle版本和你开发用的SDK小版本完全匹配,小版本不兼容会导致应用启动失败,IIS会返回403错误 - 检查发布后的文件完整性:确认
web.config文件正常生成且内容正确,.NET 6的web.config配置和.NET 5有差异,里面的aspNetCore节点的processPath、arguments参数配置错误的话,应用启动失败会触发403 - 检查是否配置了HTTPS强制跳转:如果你的服务器没有配置SSL证书,但是应用里开了
UseHttpsRedirection,访问HTTP站点会被重定向到HTTPS,没有证书的话会返回403错误
4 日志排查
- 开启ASP.NET Core的详细日志:在
appsettings.json里将Microsoft.AspNetCore的日志级别设置为Debug,查看应用启动日志和请求处理日志,明确403是IIS返回的还是应用代码里返回的 - 查看IIS的失败请求跟踪日志:可以精准定位403错误的具体子状态码,比如403.14是目录浏览未开启,403.7是SSL证书要求错误,403.503是授权过滤器拒绝访问,根据子状态码可以快速定位问题
内容的提问来源于stack exchange,提问作者Steven Frank
相关产品推荐
相关产品推荐

