.Net Api - 父路由匹配无效的嵌套路由

.Net Api - Parent route matched for invalid nested route

我有一个 .Net 5 API 和一些嵌套路由如下:

  [Route("api/v{version:apiVersion}/orders")]
  [ApiVersion("1.0")]
  [ApiController]
  public class OrdersController: ControllerBase
  {
    [HttpGet("{userId:required}")]
    public async Task<ActionResult> Get(string userId,
      CancellationToken cancellationToken = default)
    {
      // return the orders corresponding to the userId
    }
  }

  [Route("api/v{version:apiVersion}/orders/details")]
  [ApiVersion("1.0")]
  [ApiController]
  public class OrdersDetailsController: ControllerBase
  {
    [HttpGet("{orderId:required}")]
    public async Task<ActionResult> Get(string orderId,
      CancellationToken cancellationToken = default)
    {
      // return the order details
    }
  }

下面是我向 API 发出请求时得到的响应列表:

问题是:是否有可能使 GET /orders/details/ 请求与 OrderDetailsController 路由匹配,因此 return 404 因为缺少 orderId URL 参数?

试试这个

[Route("api/v{version:apiVersion}/orders")]
  [ApiVersion("1.0")]
  [ApiController]
  public class OrdersController: ControllerBase
  {

    [HttpGet("{userId:required}")]
    public async Task<ActionResult> Get(string userId,
      CancellationToken cancellationToken = default)
    {
      if(userId.ToLower=="details") throw new HttpException(404, "not found");

      // return the orders corresponding to the userId
    }

 }

很遗憾,仅使用 .Net 路由功能似乎无法实现所需的场景。我在这种情况下看到的可能解决方案是:

  1. 所述,如果userId匹配子路由
  2. ,则引入手动检查并抛出404异常
  3. 更新路由架构以防止出现这种情况

因为我想仅使用 .Net 路由功能来实现这一点,所以我继续使用第二个解决方案(特别是因为对整个路由模式的影响并不大)。