首页 > 解决方案 > 如何在使用 ASP.NET Core 中间件健康检查创建的健康检查端点上选择性地强制实施 HTTPS?

问题描述

我已经在 MVC 应用程序中使用中间件配置了运行状况检查,但出于安全原因,我被要求在运行状况端点上强制执行 https 。由于不同的原因,我不能在整个服务中强制执行它,所以我想知道是否有一种机制可以选择性地对健康端点执行此操作。虽然可以使用控制器来做到这一点,但我似乎无法为中间件创建的端点实现它。

有没有内置的方法来实现这一点?我可以创建某种自定义中间件作为包装器来实现它吗?

我查看了 EndpointBuilders、约定、RequireHttps 等,但找不到任何东西。

标签: c#asp.netasp.net-mvcasp.net-coreasp.net-core-3.1

解决方案


可以通过在 Startup#Configure 中为 https 指定端口号来解决

app.UseEndpoints(endpoints =>
{
  // ... other end-points here

  endpoints.MapHealthChecks("/readiness").RequireHost("*:5001", "*:443");
});

在我的计算机上使用 Kestrel 进行测试和验证,默认使用端口 5000 用于 http,5001 用于 https。如果您的生产环境不使用端口 443,您可以删除, "*:443".


推荐阅读