我使用ASP.NET Core2.1创建了REST应用程序。REST由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服务在端口8998上。这个REST是由我不同的应用程序启动的。我能够连接到这个REST使用浏览器和邮递员。
现在,我想保护与REST的连接。我所做的是:我在配置方法中添加了必要配置,以强制我的启动类中的安全连接:
app.UseHttpsRedirection();
我还执行了一个信任开发证书的代码:
dotnet dev-certs https --trust
情况是,当我试图通过浏览器访问web api时,我得到并出错:
本地主机拒绝连接。尝试: 检查连接 检查代理和防火墙 ERR_CONNECTION_REFUSED
另外,当我使用POSTMAN调用一些REST方法时,我得到并出错了:
无法得到任何回应
我做错了什么?是否需要在Kestrel配置中直接指定证书?
发布于 2019-02-18 20:29:40
由于https是一个不同的协议,所以您需要为https配置另一个端口。为了自动重定向到https url,您需要做三件事:
.UseUrls("http://localhost:8998", "https://localhost:8999");
启动应用程序时,您应该看到:
services.AddHttpsRedirection(options => options.HttpsPort = 8999);
如果省略此步骤,则使用默认端口,可能是5001。要在Azure上托管,您可能需要将其设置为443。app.UseHttpsRedirection();
对http://localhost:8998
的调用现在将重定向到https://localhost:8999
。
如果您遵循了上述步骤,但没有创建证书,那么https端口就不会列出,也将不可用!如果创建了证书,则应列出两个端口。
我假设在生产过程中,Api会运行在代理后面。在这种情况下,可以省略上述步骤。在代理后面运行意味着您可以将http重定向到https,这意味着您不需要https重定向。
https://stackoverflow.com/questions/54705485
复制相似问题