Https 如何在ASP.NET Core 2.1+;红隼?

Https 如何在ASP.NET Core 2.1+;红隼?,https,kestrel-http-server,asp.net-core-2.1,Https,Kestrel Http Server,Asp.net Core 2.1,因此,随着ASP.NET Core 2.1的出现,Kestrel现在会自动在HTTP端点旁边创建一个HTTPS端点,并设置默认项目模板以从HTTP重定向到HTTPS(这很容易撤销) 然而我的问题是。。。如何为我的项目完全禁用HTTPS。我已经阅读了这些文档,并使用了各种HTTPS配置设置,但我所做的一切似乎都不允许我关闭它,而只是运行一个HTTP项目 我是疯了还是错过了什么。我希望这非常容易做到。如果您使用的是Visual Studio 2017,那么您可以执行以下操作: WebHost.Cre

因此,随着ASP.NET Core 2.1的出现,Kestrel现在会自动在HTTP端点旁边创建一个HTTPS端点,并设置默认项目模板以从HTTP重定向到HTTPS(这很容易撤销)

然而我的问题是。。。如何为我的项目完全禁用HTTPS。我已经阅读了这些文档,并使用了各种HTTPS配置设置,但我所做的一切似乎都不允许我关闭它,而只是运行一个HTTP项目


我是疯了还是错过了什么。我希望这非常容易做到。

如果您使用的是Visual Studio 2017,那么您可以执行以下操作:

WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:5000")
.UseStartup<Startup>();
app.UseHttpsRedirection();
  • 转到项目属性。(右键单击>属性)
  • 单击调试选项卡
  • 在Web服务器设置下,取消选择启用SSL
  • 保存、生成并重试

  • 这将更新launchSettings.json文件中的iisExpress设置。

    在Startup.cs中,删除中间件

    app.UseHttpsRedirection();
    

    事实证明,实现我想要做的事情的正确方法是使用.UseKestrel()专门配置Kestrel,只需指定一个地址,如下所示:

      WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => {
          options.Listen(IPAddress.Loopback, 5080); //HTTP port
        })
        .UseStartup<Startup>();
    
    如果指定了第二个地址,则将假定该地址由内置的开发者证书保护,如下所示:

      WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options => {
          options.Listen(IPAddress.Loopback, 5080); //HTTP port
          options.Listen(IPAddress.Loopback, 5443); //HTTPS port
        })
        .UseStartup<Startup>();
    
    WebHost.CreateDefaultBuilder(args)
    .UseKestrel(选项=>{
    options.Listen(IPAddress.Loopback,5080);//HTTP端口
    options.Listen(IPAddress.Loopback,5443);//HTTPS端口
    })
    .UseStartup();
    
    当然,您可以按照以下说明专门保护您的SSL地址:


    这是生产设置所必需的。

    在项目的文件
    Properties/launchSettings.json
    中,查看键
    applicationUrl
    。您会发现类似于:

    ...
    "applicationUrl": "https://localhost:5001;http://localhost:5000",
    ...
    
    删除
    https
    端点,就完成了

    编辑

    如@Xorcist所述,文件
    launchSettings.json
    未发布。因此,上述解决方案只能在开发环境中工作。要在生产和开发中禁用https,并且通常要配置要侦听的URL,您还可以执行以下操作之一:

    WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://localhost:5000")
    .UseStartup<Startup>();
    
    app.UseHttpsRedirection();
    
    • 使用
      --url
      参数运行
      dotnet
      ,将与
      launchSettings.json
      中的
      applicationUrl
      具有相同的效果。例如:
      dotnet运行--url=http://0.0.0.0:5000,https://0.0.0.0:5001
      。同样,删除你不想使用的

    • 使用
      ASPNETCORE\u url
      environment变量也可以实现同样的效果

    • 正如@Konstantin to在回答中提到的,在ASP Net Core 2.1中,您还可以在
      appsettings.json
      中配置Kestrel端点(这似乎在2.0中无法实现)

    • 最后,使用扩展方法
      WebHost.CreateDefaultBuilder(args).useUrls(“http://0.0.0.0:5000)
      。我更喜欢另一种解决方案,因为这种解决方案硬编码您是应用程序端点,并且在不重新编译应用程序的情况下无法更改

    所有可能的选项将在中详细说明

    更新(2020年12月9日):除了appsettings one之外,这些选项都是可用的。也许它仍然有效,但我不确定


    更新(2021年5月19日):除了appsettings one之外,这些选项都是可用的。也许它仍然有效,但我不确定。

    在Program.cs中,添加UseURL,如下所示:

    WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://localhost:5000")
    .UseStartup<Startup>();
    
    app.UseHttpsRedirection();
    

    dotnet
    CLI现在有一个用于此的模板

    dotnet new webapi --no-https
    

    使用ASPNETCore2.2,我只需将web服务器URL设置为http而不是https,它就可以自己获取它。我将其作为自托管进程运行

  • 转到项目属性
  • 单击调试选项卡
  • 在“Web服务器设置”下,将URL设置为
  • 请重试:)

  • 用于开发和非生产:


    在项目属性中禁用启用SSL

    在我的VS2017中,该选项不存在。因此:项目属性=>调试=>应用程序URL(删除s)并设置正确的起始页=>保存(出现覆盖启动设置的弹出窗口=>确定并准备启动(f5)我自己使用的是.NET Core CLI。在我的*.csproj或appsettings.json中没有任何东西表明应该使用SSL。根据最新消息,当存在本地开发证书时,ASP.NET将自动创建SSL终结点。因此我假设代码中有一种方法可以禁用它,但到目前为止我找不到任何方法。我认为这是正确的如果它不依赖visual studio,答案会更好。launchSettings.json文件会怎么样?这是非常没有帮助的。问题是关于asp核心和kestrel的,你的答案是关于windows上的遗留dotnet。同样的技术在VS-2019中也能很好地工作。非常感谢你的解决方案,Abhishek。仅此而已防止强制HTTP->HTTPS重定向(允许您不安全地访问站点),但不会禁用HTTPS。Kestrel仍在使用两个端口(HTTP通常为5000,HTTPS为5001)。我要找的只是HTTP,根本没有HTTPS。这对我很有帮助。我使用的是Android仿真器,当然它很可能不接受自签名SSL。因此,我尝试连接到HTTP地址,但我一直得到“307临时重定向”.经过一点研究,我认为这是因为服务器重定向到HTTPS。删除该行解决了它。即使这没有禁用HTTPS,这仍然是非常有用的信息。我也遇到了307临时重定向问题,这解决了它。是的,这是一个很好的答案实际上,使用.UseUrls()和或.UseConfiguration(),并指定了JSON配置和“URL”属性。当只提供一个地址时,这两个属性的工作方式相同。我被要求为我的上述评论添加一个示例,因此它是:hosting.JSON