我有使用ASP.NET Core 2.1创建的REST API应用程序。 REST API由WebHostBuilder创建并由Kestrel托管。
Startup.Kernel = kernel;
_restApiServer = new WebHostBuilder()
.UseKestrel(options =>
{
})
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls(string.Format("http://localhost:{0}", _configuration.PortNumber))
.UseSetting("https_port",_configuration.HttpsPort.ToString())
.Build();
_restApiServer.Run();
默认情况下,REST API在端口8998上提供。该REST API由我的其他应用程序启动。我可以使用浏览器和POSTMAN连接到该REST API。
现在,我想保护与REST API的连接。我所做的是: 我在Configure方法的Startup类中添加了必要的配置以强制安全连接:
app.UseHttpsRedirection();
我还执行了信任开发者证书的代码:
dotnet dev-certs https --trust
情况是,当我尝试通过浏览器访问Web api时出现错误:
localhost拒绝连接。 试试:
检查连接
检查代理和防火墙
ERR_CONNECTION_REFUSED
当我使用POSTMAN调用我得到的一些REST API方法时,也会出错:
无法得到任何回应
我在做什么错?我需要直接在Kestrel配置中指定证书吗?
答案 0 :(得分:2)
由于https是不同的协议,因此您需要为https配置另一个端口。要自动重定向到https网址,您需要做三件事:
添加一个侦听器。在program.cs中(端口号为示例):
.UseUrls("http://localhost:8998", "https://localhost:8999");
启动应用程序时,您应该看到:
配置https重定向。在Startup.ConfigureServices中:
services.AddHttpsRedirection(options => options.HttpsPort = 8999);
如果省略此步骤,则使用默认端口,可能是5001。要在Azure上托管,可能需要将此端口设置为443。
并在Startup.Configure中:
app.UseHttpsRedirection();
对http://localhost:8998
的呼叫现在将被重定向到https://localhost:8999
。
如果您按照上述步骤进行操作但未创建证书,则https端口未列出并且将不可用!如果创建了证书,则应列出两个端口。
我假设在生产中,Api将在代理后面运行。在这种情况下,您可以省略上述步骤。在代理后面运行意味着您可以将http重定向到那里的https,这意味着您不需要https redirect。