因此,随着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项目。
我是发疯还是只是想念东西。我希望这非常容易做到。
Answers:
如果您使用的是Visual Studio 2017,则可以执行以下操作:
这将更新launchSettings.json文件中的iisExpress设置。
在Startup.cs中,删除中间件
app.UseHttpsRedirection();
事实证明实现我想要做的正确方法是使用.UseKestrel()专门配置Kestrel并只需指定一个地址,如下所示:
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => {
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.
如果指定了第二个地址,则将假定该地址将使用内置的开发者证书进行保护,例如:
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => {
options.Listen(IPAddress.Loopback, 5080); //HTTP port
options.Listen(IPAddress.Loopback, 5443); //HTTPS port
})
.UseStartup<Startup>();
您当然可以按照以下说明专门保护您的SSL地址:
这对于生产设置是必需的。
{ "urls": "http://localhost:5080" }
program.cs(主要) public static void Main(string[] args) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json") .AddCommandLine(args) .Build(); CreateWebHostBuilder(args).UseConfiguration(config).Build().Run(); }
在Properties/launchSettings.json
您的项目文件中,查找密钥applicationUrl
。您会发现类似:
...
"applicationUrl": "https://localhost:5001;http://localhost:5000",
...
删除https
端点并完成。
编辑
如@Xorcist所述,该文件launchSettings.json
未发布。因此,以上解决方案仅在开发环境中有效。要在生产环境和开发环境中禁用https,并且通常要配置要监听的url,您还可以执行以下操作之一:
使用--urls
的参数dotnet 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中,您还可以在中配置Kestrel端点appsettings.json
(似乎无法在2.0中完成)。
最后,useUrls
扩展方法也可以实现同样的效果WebHost.CreateDefaultBuilder(args).UseUrls("http://0.0.0.0:5000")
。我更喜欢另一种解决方案,因为这些解决方案会将您硬编码为应用程序端点,并且如果不重新编译应用程序就无法更改。
有关所有可能的选项,请参阅此文档中的Microsoft文档。。
更新(2020年12月9日):根据Microsoft Docs的规定,这些选项对于Net Core 3.1仍然有效,但appsettings除外。也许它仍然有效,但我不确定。
dotnet new
确实会launchSettings.json
在dotnet 2.1中自动创建文件。在dotnet 2.0中并非如此。我刚刚在未安装Visual Studio的Ubuntu盒子中对此进行了测试。因此,至少对于2.1版本而言,launchSettings.json
它不是Visual Studio特定的文件。
launchSettings.json
未发布的事实,这也是事实,但是在生产设置中,您可能希望默认情况下启用https。无论如何,我将使用其他选项更新我的答案。
使用ASPNET CORE 2.2,我只需将Web服务器URL设置为http而不是https,它就可以自行选择它。我将其作为自托管进程运行。