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

升级.NET 6后IIS子应用无法处理请求返回307问题求助

问题根因

安装.NET 6 托管捆绑包时会全局升级IIS内置的ASP.NET Core模块(ANCM)到v6版本,该版本对进程外部署的子应用PathBase处理逻辑存在变更:默认不会自动将IIS中配置的子应用路径作为PathBase传递给后端.NET Core应用,导致应用无法识别路径前缀,路由匹配失败。
即便卸载.NET 6相关组件,升级后的ANCM默认不会自动回滚到旧版本,因此重新安装.NET 3.1也无法解决问题。

你遇到的日志表现完全符合该问题特征:请求完整URL携带/subapplication前缀,但静态文件中间件仅匹配/ping路径,说明应用拿到的PathBase为空、Path直接为/ping,找不到对应控制器路由就走到了后续中间件。

修复方案

方案1:修改子应用web.config配置(推荐)

在子应用的web.config文件中,找到aspNetCore节点,添加applyWebConfigPath="true"属性,强制ANCM传递正确的PathBase参数:

<system.webServer>
  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
  </handlers>
  <aspNetCore processPath="dotnet" arguments=".\你的应用名.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" applyWebConfigPath="true">
  </aspNetCore>
</system.webServer>

该方案无需修改应用代码,每个子应用单独配置后立即生效,无需重启IIS全局服务。

方案2:回滚ANCM版本

重新下载对应.NET Core 3.1版本的托管捆绑包安装程序,运行时选择「修复」选项,会将全局ANCM版本回滚到兼容.NET Core 3.1的旧版本,修复完成后执行iisreset命令重启IIS即可。

方案3:应用代码中显式配置PathBase

如果需要兼容多环境部署,可以在应用启动代码中显式指定子应用路径前缀:

// .NET Core 3.1 Startup.cs 示例
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 显式配置子应用路径前缀
    app.UsePathBase("/subapplication");
    
    // 后续其他中间件配置保持不变
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    // ...其他中间件
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:03