如何将不同端口上的请求路由到不同的控制器?
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
我希望将不同端口(在我的例子中是 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