Kestrel有没有办法收听2个端口,例如80和81,并为每个端口指定不同的控制器。我的方案是有2个控制器,一个用于最终用户请求,需要基于令牌的身份验证,其他控制器用于基于机器的代理,我想在其中强制执行基于客户端证书的身份验证。
答案 0 :(得分:0)
我仍然觉得设置两个单独的应用程序会更干净,更容易管理。您可以随时分离出您需要的任何内容(例如,您可以设置不同的身份验证),并且可以在包含控制器,服务和中间件之间共享任何类型的代码。
但是,如果您想将它放在同一个应用程序中,您可以尝试使用中间件。从我所看到的mvc中间件只给你访问路由主要不是端口。但是,您可以在UseMvc
之前添加中间件来重置路径。像这样:
app.Use(async (context, next) => {
if (context.Request.Host.Port == 80)
context.Request.Path = "/ports/80" + context.Request.Path.Value;
await next();
});
执行此操作后,您可以查看区域以组织控制器以进行路由。 https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas。您必须确保所有端口都具有此映射,以确保最终用户无法对此类路径进行硬编码。
答案 1 :(得分:0)
最简单的方法是在UseKestrel()
添加UseUrls("http://*:80", "http://*:80")
之后,或简单地设置环境变量ASPNETCORE_URLS="http://*:80;http://*:81"