ASP.NET Core服务不会将http:localhost:<https-port>重定向到https架构

时间:2019-08-07 07:10:20

标签: c# asp.net asp.net-core https http-redirect

我阅读了https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.2&tabs=visual-studio上的说明,这是我的Startup.cs代码(这是样板生成的代码):

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        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.UseStaticFiles();
        app.UseSpaStaticFiles();

        app.UseMvc(...);

        app.UseSpa(...);
    }
}

我的launchSettings.json

{
  "profiles": {
    "MyProject": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

当我打开http://localhost:5000时,我被重定向到https://localhost:5001。但是,当我打开http://localhost:5001时,只会得到一个错误页面。我想重定向到https。我在文档中缺少什么吗?

1 个答案:

答案 0 :(得分:1)

简单的答案是,你不能这样做。

当您尝试访问http://localhost:5001时,会遇到两种情况,即试图以不同的“语言”进行通信(服务器希望TLS握手,但会收到一些垃圾-纯文本http请求)。 因此,服务器无法重定向您,因为没有双方都无法建立的通信渠道。

如果您尝试使用http连接到端口443,则某些浏览器足够聪明,可以切换到https,但这是客户端。不能在同一端口上托管https和http。