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

.NET 6.0.4中用UseWhen条件调用UseHttpsRedirection遇空引用异常求助

问题原因及解决方法

空引用异常的核心原因是HttpsRedirection中间件所需的服务未注册。在.NET 6中,UseHttpsRedirection依赖IOptions<HttpsRedirectionOptions>服务,但WebApplication.CreateBuilder默认不会自动注册该服务,直接调用会导致依赖解析失败,触发空引用。

方案一:注册HttpsRedirection服务

在构建WebApplication之前,先注册HttpsRedirection服务并配置必要选项(比如HTTPS端口),修正后的代码如下:

static void Main(string[] args)
{
    var wab = WebApplication.CreateBuilder(args);
    
    // 注册HttpsRedirection服务,配置HTTPS端口(可从配置文件读取,这里硬编码示例)
    wab.Services.AddHttpsRedirection(options =>
    {
        options.HttpsPort = 443;
    });
    
    var wa = wab.Build();
    
    wa.UseWhen(context => !context.Request.Path.StartsWithSegments("/exercises"),
        builder =>
        {
            builder.UseHsts();
            builder.UseHttpsRedirection();
        });
    
    wa.Run();
}

如果你的项目使用launchSettings.json配置了HTTPS端口,也可以通过配置系统自动读取,比如:

options.HttpsPort = wab.Configuration.GetValue<int>("HttpsPort");

方案二:手动实现条件重定向

如果不想依赖HttpsRedirection服务,也可以直接在中间件里手动实现HTTPS重定向逻辑,避免服务注册的问题:

static void Main(string[] args)
{
    var wab = WebApplication.CreateBuilder(args);
    var wa = wab.Build();
    
    wa.UseWhen(context => !context.Request.Path.StartsWithSegments("/exercises"),
        builder =>
        {
            builder.UseHsts();
            // 手动实现HTTPS重定向
            builder.Use(async (context, next) =>
            {
                if (!context.Request.IsHttps)
                {
                    var httpsUrl = new UriBuilder(context.Request.Uri)
                    {
                        Scheme = Uri.UriSchemeHttps,
                        Port = 443
                    }.ToString();
                    context.Response.Redirect(httpsUrl, permanent: true);
                    return;
                }
                await next();
            });
        });
    
    wa.Run();
}

内容的提问来源于stack exchange,提问作者Андрей Егоров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:45:32