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

.NET 6最小Web应用部署Linux版Azure App Service永久重定向报错

问题原因
  • 应用启动失败核心原因:Azure App Service Linux采用反向代理架构,TLS/HTTPS终结由平台前端统一处理,你绑定的App Service托管证书也部署在前端层,后端应用不需要监听HTTPS端口,也不需要在应用层配置证书。你的代码中手动添加了https://+的监听地址,Kestrel启动时会尝试加载HTTPS证书,但生产容器中不存在本地开发证书,也没有配置其他可用服务证书,直接抛出异常导致进程崩溃。同时你手动指定http://+监听默认80端口,但App Service Linux要求后端应用必须监听8080端口(端口值通过PORT环境变量注入),手动配置端口导致应用无法响应平台的8080端口健康探活,最终判定启动失败。
  • 默认域名提示不安全原因:*.azurewebsites.net是Azure公共共享域名,曾被大量恶意站点用于钓鱼、欺诈活动,已被浏览器安全策略标记为风险域名,该问题与你的应用代码无关。
修复方案

直接将代码替换为以下版本即可,不需要修改现有App Service配置:

using Microsoft.AspNetCore.HttpOverrides;

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

// 适配App Service反向代理架构,配置转发头
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.All;
    options.KnownNetworks.Clear();
    options.KnownProxies.Clear();
});

WebApplication app = builder.Build();

// 转发头中间件必须放在其他中间件最前端
app.UseForwardedHeaders();

// 匹配所有请求(任意方法、任意路径、任意域名),直接返回301永久重定向到主站根路径
app.Run(context =>
{
    context.Response.Redirect("https://example.com", permanent: true, preserveMethod: true);
    return Task.CompletedTask;
});

app.Run();

修改说明

  • 移除了手动添加HTTP/HTTPS监听地址的代码,.NET 6内置的Kestrel会自动读取App Service注入的PORT环境变量,默认监听8080端口,符合平台健康探活要求。
  • 移除了应用层HTTPS跳转配置,你已经在App Service后台开启了「仅HTTPS访问」,平台会自动完成HTTP到HTTPS的301跳转,不需要在应用层重复处理,避免跳转循环问题。
  • 新增反向代理转发头配置,正确识别前端代理传递的原始请求协议、IP等信息。
  • 替换了原有的分路由GET请求匹配规则,用终端中间件处理所有请求,无论请求方法、访问路径、Host头是什么,都会直接跳转到主站根路径,访问默认azurewebsites.net域名的请求也会直接跳转,不会再显示风险站点提示。
  • 不需要在代码中处理任何证书相关逻辑,平台前端会自动完成TLS握手和证书校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:18:31