强制 ASP .NET Core 2.1 使用 HTTPS 和 return 400 错误

Enforcing ASP .NET Core 2.1 to use HTTPS and return 400 Error

我有一个较旧的 ASP .NET Core 2.1 应用程序,它一直在接受 HTTP 请求。

我现在需要应用程序停止使用 HTTP 并仅使用 HTTPS 和 return 40x 错误 any HTTP 请求 automatically/by 默认值。

我做了以下事情:

但无论我使用 HTTP 还是 HTTPS 调用,它仍然接受和 returns 相同的响应(和 200)。

有什么关于我在这里缺少实施的建议吗?

这是我的一部分 Startup.cs:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Use(async (context, next) =>
        {
            if (context.Request.Method == "OPTIONS")
            {
                context.Response.StatusCode = 405;
                return;
            }
            await next.Invoke();
        });
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseHttpsRedirection();

        app.UseUsageLogging();
        app.UseSerilogRequestLogging();
        app.UseCoreExceptionHandling();

        app.UseAuthentication();
        app.UseCors("CorsPolicy");
        app.UseAspNetCoreAuth();

...

这是请求,returns 200 OK,数据相同:

http://myapp.net/ping

https://myapp.net/ping

或者我错过了它应该如何工作?

更新:即使我删除了 HttpsRedirection 部分,并保留唯一的 app.UseExceptionHandler - 它仍然没有按预期工作(所有 HTTP 仍在通过并且 returns 与相同的数据HTTPS).

据我所知,如果你使用了UseHttpsRedirection,它会将所有的http请求重定向到HTTPS。这意味着您的网站将不包含任何发送到您的服务器的 http 请求。使用 http.

时不需要 return 400

你的服务器会让所有的http请求重定向到https。我建议你可以尝试使用浏览器F12开发工具来检查这个https重定向是否正常。

看来最好的方法是将v2.1 迁移到v3.1。然后还创建自己的包以使用 TLS 进行远程连接,并禁用 app.UseHttpsRedirection();