Azure Functions使用dotnet-isolated模型时req.host返回localhost问题
Azure Functions隔离进程模型中获取真实Host的解决方案
你的推测完全正确:隔离进程模型下,Functions宿主进程接收外部请求后,会转发到独立运行的ASP.NET Core应用进程,转发时请求的Host头会被设置为localhost,因此直接读取
req.Host会得到localhost而非真实域名。可以通过
X-Forwarded-Host头获取真实主机名,更规范的做法是配置ASP.NET Core的转发头中间件,让应用自动识别并同步真实Host信息:- 在Program.cs中添加转发头配置:
var builder = WebApplication.CreateBuilder(args); builder.Services.Configure<ForwardedHeadersOptions>(options => { // 启用转发Host和Proto头 options.ForwardedHeaders = ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto; // 信任Azure内部的私有IP段,确保转发头来自合法的宿主进程 options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("10.0.0.0"), 8)); options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("192.168.0.0"), 16)); }); var app = builder.Build(); // 必须在其他中间件之前注册转发头中间件 app.UseForwardedHeaders(); app.MapFunctions(); app.Run();- 配置完成后,直接读取
req.Host就能得到真实的域名(比如foobar.com),无需手动解析X-Forwarded-Host头。
如果暂时不想配置中间件,也可以直接从请求头中读取真实主机:
var realHost = req.Headers["X-Forwarded-Host"].FirstOrDefault();
内容的提问来源于stack exchange,提问作者DenLilleMand
相关产品推荐
相关产品推荐

