Net Core:如何通过端口分隔控制器?

Fra*_*k59 5 c# .net-core asp.net-core-2.0

我需要通过 netcore2.0 自托管 Web 服务内的端口分隔控制器。

例子:

有 2 个端口(p1 和 p2)和 3 个控制器(c1、c2、c3)。需求方案:c1处理p1的请求,c2和c3处理p2的请求。

关于我该如何做到这一点有什么想法吗?

Fra*_*k59 4

在 GitHub 上得到答案https://github.com/aspnet/Mvc/issues/8502

[PortActionConstraint(5000)]
public class HomeController : Controller
{
   ...
}

[AttributeUsage(AttributeTargets.Class)]
public class PortActionConstraint : ActionMethodSelectorAttribute
{
    public PortActionConstraint(int port)
    {
        Port = port;
    }

    public int Port { get; }

    public override bool IsValidForRequest(RouteContext routeContext, ActionDescriptor action)
    {
        //external port
        var externalPort = routeContext.HttpContext.Request.Host.Port;
        //local port 
        var localPort = routeContext.HttpContext.Connection.LocalPort;
        //write here your custom logic. for example  
        return Port == localPort ;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是的你是对的。HttpContext.Request.Host.Port 是外部端口。在我们的解决方案中,我们使用 HttpContext.Connection.LocalPort 而不是 HttpContext.Request.Host.Port,并使用自定义 IActionFilter 而不是自定义属性。工作正常。我会修复答案 (3认同)