Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Kestrel服务器:如何将不同的端口绑定到不同的控制器?_Asp.net Core_Kestrel Http Server - Fatal编程技术网

Asp.net core Kestrel服务器:如何将不同的端口绑定到不同的控制器?

Asp.net core Kestrel服务器:如何将不同的端口绑定到不同的控制器?,asp.net-core,kestrel-http-server,Asp.net Core,Kestrel Http Server,Kestrel是否有办法监听两个端口,例如80和81,并为每个端口指定不同的控制器 我的场景是有两个控制器,一个用于需要基于令牌的身份验证的最终用户请求,另一个用于基于机器的代理,我希望在其中强制执行基于客户端证书的身份验证。我仍然觉得设置两个独立的应用程序会更干净,更易于管理。您可以随时分离出您需要的任何内容(例如,在您的情况下,您可以设置不同的身份验证),并且可以在它们之间共享任何类型的代码,包括控制器、服务和中间件 但是,如果您想在同一个应用程序中使用它,可以尝试使用中间件。从我所看到的,

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不同。然后,此服务端口不会暴露在主机集群外部。