102

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

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

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

4

11 回答 11

83

在 Startup.cs 中,删除中间件

app.UseHttpsRedirection();
于 2018-07-14T01:03:43.680 回答
65

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

  1. 转到您的项目属性。(右键单击>属性)
  2. 单击调试选项卡。
  3. 在 Web 服务器设置下,取消选择启用 SSL。
  4. 保存、构建并重试。

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

于 2018-06-19T20:45:18.077 回答
44

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

  WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options => {
      if (context.Configuration[WebHostDefaults.EnvironmentKey] == Environments.Development) {
        options.Listen(IPAddress.Loopback, 5080); //HTTP port
      }
    })
    .UseStartup<Startup>();

实际上覆盖了默认设置,并在 Kestel 启动时显示此警告:

warn: Microsoft.AspNetCore.Server.Kestrel[0]
  Overriding address(es) 'https://localhost:5001, http://localhost:5000'. Binding to endpoints defined in UseKestrel() instead.

注意检查开发环境;在生产中,默认端口不同(80)并且没有 HTTPS。

如果指定了第二个地址,它将假定该地址将使用内置的开发人员证书进行保护,如下所示:

  WebHost.CreateDefaultBuilder(args)
    .UseKestrel(options => {
      options.Listen(IPAddress.Loopback, 5080); //HTTP port
      options.Listen(IPAddress.Loopback, 5443); //HTTPS port
    })
    .UseStartup<Startup>();

您当然可以按照此处所述专门保护您的 SSL 地址:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1&tabs=aspnetcore2x

这是生产设置所必需的。

于 2018-07-15T03:09:48.083 回答
43

Properties/launchSettings.json您的项目文件中,查看 key applicationUrl。你会发现类似的东西:

...
"applicationUrl": "https://localhost:5001;http://localhost:5000",
...

删除https端点,它就完成了。

编辑

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

  • 使用,--urls的参数会产生与indotnet run相同的效果。例如:。再次,删除您不想使用的那个。applicationUrllaunchSettings.jsondotnet run --urls=http://0.0.0.0:5000,https://0.0.0.0:5001

  • 同样可以通过ASPNETCORE_URLS环境变量来实现。

  • 正如@Konstantin 对这个问题的回答中提到的那样,在 ASP Net Core 2.1 中,您还可以在 2.0 中配置 Kestrel 端点appsettings.json(似乎这在 2.0 中无法完成)。

  • 最后,同样可以通过useUrls扩展方法来实现WebHost.CreateDefaultBuilder(args).UseUrls("http://0.0.0.0:5000")。我更喜欢其他解决方案,因为这个解决方案硬编码您是应用程序端点,并且在不重新编译应用程序的情况下无法更改。

Microsoft Docs on this中详细解释了所有可能的选项。

更新(2020 年 12 月 9 日) :根据 Microsoft Docs ,这些选项对于 Net Core 3.1 仍然有效,除了 appsettings 之一。也许它仍然有效,但我不确定。

更新(2021 年 5 月 19 日) :根据 Microsoft Docs ,这些选项对于 Net 5 仍然有效,除了 appsettings 之一。也许它仍然有效,但我不确定。

于 2018-09-27T09:27:36.527 回答
18

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

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

并在 Startup.cs 中删除/评论以下内容:

app.UseHttpsRedirection();
于 2019-01-05T21:14:19.397 回答
15

CLI现在dotnet有一个模板。

dotnet new webapi --no-https
于 2019-02-14T03:40:33.967 回答
5

使用 ASPNET CORE 2.2,我只需将 Web 服务器 URL 设置为 http 而不是 https,它会自行获取。我将其作为自托管进程运行。

  1. 转到您的项目属性。
  2. 单击调试选项卡。
  3. 在 Web 服务器设置下,将 URL 设置为http://xxx
  4. 再试一次 :)
于 2019-08-07T09:08:24.130 回答
3

关闭https在于这3个变化......

属性/launchSettings.json

  • sslPort设置为 0
  • applicationUrl中删除 https url

属性/launchSettings.json

启动.cs

  • 删除或注释掉app.UseHttpsRedirection()

启动.cs

于 2021-07-10T02:20:04.393 回答
2

用于开发而非生产: 在此处输入图像描述

在项目属性中禁用启用 SSL

于 2019-10-24T08:10:30.250 回答
1

当使用 docker 时,另一种禁用 https 的方法特别方便。在 Dockerfile 中设置环境变量,值中只有一个 HTTP url。

#https + http
ENV ASPNETCORE_URLS=http://+:5001;http://+:5000 
#http only
ENV ASPNETCORE_URLS=http://+:5000 
于 2021-09-18T16:58:07.773 回答
0

@joanlofe 的回答非常好,但也有一种“愚蠢”的方式可以在 5001 端口上重新引入 HTTPS。如果您调用Clear配置源(例如,为了配置源的正确分层),则意味着一个隐式源消失了——“launchSettings.json”模板。因此,如果您依赖此文件而不是“appsettings.json”(默认情况下您可能是),您的应用程序将在端口 5001 上启用 HTTPS。

于 2021-11-03T19:45:45.520 回答