首页 > 解决方案 > 强制 ASP .NET Core 2.1 使用 HTTPS 并返回 400 错误

问题描述

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

我现在需要该应用程序停止使用 HTTP 并仅使用 HTTPS 并自动/默认为任何HTTP 请求返回 40x 错误。

我做了以下事情:

但无论我使用 HTTP 还是 HTTPS 调用,它仍然接受并返回相同的响应(和 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();

...

以下是请求,它们都返回 200 OK 和相同的数据:

http://myapp.net/ping

https://myapp.net/ping

还是我错过了它应该如何工作?

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

标签: asp.net-corehttphttps

解决方案


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

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


推荐阅读