如何将不同端口上的请求路由到不同的控制器?

How to route requests on different ports to different controllers?

我希望将不同端口(在我的例子中是 80 和 443)上的请求路由到不同的控制器。

我在 this answer 中看到了建议的技术,但那里只提供了一半的解决方案(服务器端)。缺少的部分是如何配置控制器以接收修改后的路由。

我是 ASP.NET Core 的新手,所以我可能遗漏了一些明显的东西。事实上,我什至可能不称它为正确的东西。

我应该如何处理我的控制器,以便路由请求(如链接答案中所示)到达适当的控制器?

我能够解决 port/controller 映射问题,至少对于我来说,通过稍微修改建议的 Use 调用:

app = builder.Build();

app.Use(async (context, next) =>
{
  if (context.Connection.LocalPort == 80)
  {
    context.Response.Headers["Content-Type"] = "text/html; charset=utf-8";
    await context.Response.SendFileAsync(@"Pages\Static\Setup.htm");
  }
  else
  {
    await next();
  }
});

或者,作为更精简的替代方案:

app = builder.Build();

app.MapGet("/", (HttpContext context) =>
{
  context.Response.Headers["Content-Type"] = "text/html; charset=utf-8";
  return File.ReadAllText(@"Pages\Static\Setup.htm");
}).RequireHost("*:80");

这适用于我的用例,因为我只允许在端口 80 上访问单个静态页面,安装根 CA 的用户说明。完成该任务后,其他一切都将在 443 上正常运行。

所以最后我根本不需要映射到控制器。事实上,通过这种方法,我想知道我将如何打破导航框架以仅显示独立的设置页面。这解决了这两个问题。

YMMV