因此,随着 ASP.NET Core 2.1 的出现,Kestrel 现在会自动在 HTTP 端点旁边创建一个 HTTPS 端点,并且默认项目模板设置为从 HTTP 重定向到 HTTPS(这很容易撤消)。
但是我的问题是......我如何才能完全为我的项目禁用 HTTPS。我已经阅读了文档并使用了 HTTPS 的各种配置设置,但我所做的一切似乎都不允许我将其关闭并只运行一个 HTTP 项目。
我是疯了还是只是错过了什么。我希望这非常容易做到。
因此,随着 ASP.NET Core 2.1 的出现,Kestrel 现在会自动在 HTTP 端点旁边创建一个 HTTPS 端点,并且默认项目模板设置为从 HTTP 重定向到 HTTPS(这很容易撤消)。
但是我的问题是......我如何才能完全为我的项目禁用 HTTPS。我已经阅读了文档并使用了 HTTPS 的各种配置设置,但我所做的一切似乎都不允许我将其关闭并只运行一个 HTTP 项目。
我是疯了还是只是错过了什么。我希望这非常容易做到。
在 Startup.cs 中,删除中间件
app.UseHttpsRedirection();
如果您使用的是 Visual Studio 2017,则可以执行以下操作:
这将更新 launchSettings.json 文件中的 iisExpress 设置。
事实证明,实现我想要做的事情的正确方法是使用 .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 地址:
这是生产设置所必需的。
在Properties/launchSettings.json
您的项目文件中,查看 key applicationUrl
。你会发现类似的东西:
...
"applicationUrl": "https://localhost:5001;http://localhost:5000",
...
删除https
端点,它就完成了。
编辑
正如@Xorcist 所述,该文件launchSettings.json
未发布。因此,上述解决方案仅适用于开发环境。要在生产和开发中禁用 https 并且通常配置要收听的 url,您还可以执行以下操作之一:
使用,--urls
的参数会产生与indotnet run
相同的效果。例如:。再次,删除您不想使用的那个。applicationUrl
launchSettings.json
dotnet 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 之一。也许它仍然有效,但我不确定。
在 Program.cs 中,添加 UseUrls,如下所示:
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:5000")
.UseStartup<Startup>();
并在 Startup.cs 中删除/评论以下内容:
app.UseHttpsRedirection();
CLI现在dotnet
有一个模板。
dotnet new webapi --no-https
使用 ASPNET CORE 2.2,我只需将 Web 服务器 URL 设置为 http 而不是 https,它会自行获取。我将其作为自托管进程运行。
关闭https在于这3个变化......
属性/launchSettings.json
启动.cs
当使用 docker 时,另一种禁用 https 的方法特别方便。在 Dockerfile 中设置环境变量,值中只有一个 HTTP url。
#https + http
ENV ASPNETCORE_URLS=http://+:5001;http://+:5000
#http only
ENV ASPNETCORE_URLS=http://+:5000
@joanlofe 的回答非常好,但也有一种“愚蠢”的方式可以在 5001 端口上重新引入 HTTPS。如果您调用Clear
配置源(例如,为了配置源的正确分层),则意味着一个隐式源消失了——“launchSettings.json”模板。因此,如果您依赖此文件而不是“appsettings.json”(默认情况下您可能是),您的应用程序将在端口 5001 上启用 HTTPS。