nia*_*iao 7 https asp.net-core-2.1
我有使用 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();
Run Code Online (Sandbox Code Playgroud)
默认情况下,REST API 在端口 8998 上提供服务。这个 REST API 是由我的不同应用程序启动的。我可以使用浏览器和 POSTMAN 连接到这个 REST API。
现在我想保护我与 REST API 的连接。我所做的是:我在 Configure 方法的 Startup 类中添加了必要配置以强制安全连接:
app.UseHttpsRedirection();
Run Code Online (Sandbox Code Playgroud)
而且我还执行了一个用于信任开发证书的代码:
dotnet dev-certs https --trust
Run Code Online (Sandbox Code Playgroud)
情况是,当我尝试通过浏览器访问 web api 时,出现错误:
本地主机拒绝连接。尝试:
检查连接
检查代理和防火墙
ERR_CONNECTION_REFUSED
此外,当我使用 POSTMAN 调用一些 REST API 方法时,我得到并出错:
无法得到任何回应
我究竟做错了什么?我需要在 Kestrel 配置中直接指定证书吗?
由于 https 是不同的协议,因此您需要为 https 配置另一个端口。为了自动重定向到 https url,您需要做三件事:
添加监听器。在 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。
| 归档时间: |
|
| 查看次数: |
11558 次 |
| 最近记录: |