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

在IIS中配置ASP.NET WebForms迁移至ASP.NET Core(YARP代理)求助

解决方案

1. 调整YARP路由配置,适配子应用路径

当Core应用部署在/sub1/sub2/myapp这类子目录时,YARP需要正确处理请求路径的前缀,避免把子目录路径传递给后端WebForms站点。修改appsettings.json:

"ReverseProxy": {
  "Routes": {
    "fallbackRoute": {
      "ClusterId": "fallbackCluster",
      "Order": 1,
      "Match": {
        "Path": "{**catch-all}"
      },
      "Transforms": [
        { "PathRemovePrefix": "/sub1/sub2/myapp" }, // 移除子应用前缀,把原始路径传给后端
        { "RequestHeaderOriginalHost": "true" } // 保留原始主机头(按需启用,看WebForms站点需求)
      ]
    }
  },
  "Clusters": {
    "fallbackCluster": {
      "Destinations": {
        "fallbackApp": {
          "Address": "http://localhost:7000" // 不同Core应用对应不同WebForms站点,比如web application2要改成http://localhost:7001
        }
      }
    }
  }
}

2. 配置ASP.NET Core应用的基础路径

在Core应用的Program.cs里设置应用的基础路径,确保应用能正确识别子目录的请求:

var builder = WebApplication.CreateBuilder(args);

// 添加YARP服务
builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

// 设置对应IIS子应用的路径前缀
app.UsePathBase("/sub1/sub2/myapp");

app.UseRouting();

// 启用YARP代理
app.MapReverseProxy();

app.Run();

3. 调整IIS子应用的配置

  • 每个Core子应用的应用程序池必须设置为.NET Core模式(无托管代码)
  • 检查web.config里的ASP.NET Core模块配置,确保节点正确:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\YourCoreApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

inheritInChildApplications="false"必须加上,避免继承父站点配置导致冲突

4. 验证代理行为

部署后测试:

  • 访问https://example.com/sub1/sub2/myapp/home,应该被代理到http://localhost:7000/home(对应WebForms站点的路径)
  • 如果WebForms站点依赖原始主机头,确保YARP的RequestHeaderOriginalHost转换已启用,或者按需调整RequestHeaderHost转换

常见问题排查

  • 出现404:检查子应用路径前缀是否和UsePathBase、PathRemovePrefix配置完全一致
  • 后端收到错误路径:确认PathRemovePrefix是否正确移除了子目录前缀
  • 权限报错:确保Core应用的程序池对站点目录有读写权限(日志、临时文件等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:27:34