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

.NET Core 7 MVC部署IIS 10进程内模式获取服务器变量为空求助

在.NET Core 7/IIS进程内模式下获取服务器变量的解决方法

核心配置与操作步骤

  • 在IIS中开启变量转发权限:

    1. 打开IIS管理器找到目标站点,进入「配置编辑器」
    2. 选中「system.webServer/aspNetCore」节点(进程内模式专属配置项)
    3. 找到「environmentVariables」集合,添加你需要获取的服务器变量;如果是负载均衡/SSO传递的自定义变量,还要去「请求筛选」->「HTTP头」中把对应的头设置为允许状态
  • ASP.NET Core项目配置转发头中间件:
    因为应用部署在负载均衡之后,必须先处理转发过来的请求信息,在Program.cs中添加如下配置:

    var builder = WebApplication.CreateBuilder(args);
    // 配置转发头参数
    builder.Services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // 将负载均衡服务器IP添加为可信代理
        options.KnownProxies.Add(IPAddress.Parse("你的负载均衡IP地址"));
    });
    
    var app = builder.Build();
    // 该中间件必须放在其他业务中间件之前执行
    app.UseForwardedHeaders();
    
  • 正确获取变量的代码写法:
    进程内模式下有两种可靠的获取方式,根据变量传递方式选择:

    // 方式1:获取原生IIS服务器变量
    var serverVarFeature = HttpContext.Features.Get<IISServerVariableFeature>();
    var targetVar = serverVarFeature?.GetServerVariable("你的目标变量名");
    
    // 方式2:如果SSO通过请求头传递信息,直接读取请求头
    var targetHeader = HttpContext.Request.Headers["对应的头名称"];
    

排查注意事项

  • 确认IIS的aspNetCore节点下,environmentVariables集合确实包含了你要获取的变量
  • 查看IIS日志,验证负载均衡/SSO服务是否真的将变量传递到了IIS服务器,排除上游未传值的情况
  • 检查项目的web.config文件,确认requestFiltering配置没有拦截对应的请求头
  • .NET Core 7进程内模式无需额外安装Microsoft.AspNetCore.Server.IISIntegration包,该组件已内置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:12:46