我正在设计一个基于ASP.NET Core的Web API,该API需要支持我产品的多个变体,比如说基于许可证或所安装产品的变体。
我没有考虑为每种类型的产品提供多种服务,而是想到了一种包含/托管多个端点或URL的服务。安装时,我将在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的新手,如果可以实现,请帮助我。 预先感谢。
答案 0 :(得分:1)
一种解决方法是在启用了特定端口的api控制器上添加自定义约束。
1。创建一个PortActionConstraint
类:
[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。在所有控制器上添加具有相应端口号的属性,例如
[PortActionConstraint(5000)]
[Route("api/[controller]")]
[ApiController]
public class Product1Controller : ControllerBase