Asp.net core Kestrel服务器:如何将不同的端口绑定到不同的控制器?
Kestrel是否有办法监听两个端口,例如80和81,并为每个端口指定不同的控制器Asp.net core Kestrel服务器:如何将不同的端口绑定到不同的控制器?,asp.net-core,kestrel-http-server,Asp.net Core,Kestrel Http Server,Kestrel是否有办法监听两个端口,例如80和81,并为每个端口指定不同的控制器 我的场景是有两个控制器,一个用于需要基于令牌的身份验证的最终用户请求,另一个用于基于机器的代理,我希望在其中强制执行基于客户端证书的身份验证。我仍然觉得设置两个独立的应用程序会更干净,更易于管理。您可以随时分离出您需要的任何内容(例如,在您的情况下,您可以设置不同的身份验证),并且可以在它们之间共享任何类型的代码,包括控制器、服务和中间件 但是,如果您想在同一个应用程序中使用它,可以尝试使用中间件。从我所看到的,
我的场景是有两个控制器,一个用于需要基于令牌的身份验证的最终用户请求,另一个用于基于机器的代理,我希望在其中强制执行基于客户端证书的身份验证。我仍然觉得设置两个独立的应用程序会更干净,更易于管理。您可以随时分离出您需要的任何内容(例如,在您的情况下,您可以设置不同的身份验证),并且可以在它们之间共享任何类型的代码,包括控制器、服务和中间件 但是,如果您想在同一个应用程序中使用它,可以尝试使用中间件。从我所看到的,MVC中间件只允许您访问路由,而不是端口。但是,您可以在使用MVC之前添加中间件来重置路径。大概是这样的:
app.Use(异步(上下文,下一步)=>{
if(context.Request.Host.Port==80)
context.Request.Path=“/ports/80”+context.Request.Path.Value;
等待下一个();
});
完成此操作后,您可以查看区域以组织控制器进行路由。您必须确保所有端口都具有此映射,以确保最终用户无法硬编码此类路径。最简单的方法是在
UseKestrel()之后添加useURL(“http://*:80”,“http://*:80”)
,或者只需设置环境变量ASPNETCORE\u url=“http://*:80;http://*:81”
- 更多选项,如appsettings.json,如下所述:
- ms文档在此:
这种工作看起来像是不同web应用程序的工作。即使您可以这样做,默认情况下,几乎所有内容(如cookies)都将被分隔。在这种情况下,我并不认为将其作为一个应用程序有什么意义。这里是不同端口上不同控制器的使用案例:健康检查和指标放在一个服务端口上,该端口与最终用户API不同。然后,此服务端口不会暴露在主机集群外部。