在单个 ASP.NET 核心 WebAPI 服务中托管多个产品 API

Hosting multiple product APIs in single ASP.NET Core WebAPI Service

我正在设计一个 ASP.NET 基于核心的 Web API,它需要支持我的产品的多个变体,比方说基于许可证或安装的变体。

我没有为每种类型的产品寻求多项服务,而是考虑了一项服务,其中 houses/hosts 多个端点或 URLs。我将在安装时在 appsettings.json 中将其设置为可配置。

我知道关于创建 WebHost 的 UseUrls,但是我可以将一组 URL 中的特定 URL 绑定到特定的控制器吗?

代码:

WebHost.CreateDefaultBuilder(args)
.UseUrls("http://localhost:5000;http://localhost:5001;https://localhost:5002")

期待

https://localhost:5000/ --> Product1Controller
https://localhost:5001/ --> Product2Controller
https://localhost:5002/ --> Product2Controller

我是 ASP.NET Core 的新手,请帮助我是否可以实现。 提前致谢。

解决方法是在 api 控制器上添加自定义约束,该控制器启用了特定端口。

1.Create一个PortActionConstraintclass:

[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;
    }
}

2.Add 属性与所有控制器上对应的端口号,如

[PortActionConstraint(5000)]
[Route("api/[controller]")]
[ApiController]
public class Product1Controller : ControllerBase