在 ASP.NET Core(以前是 ASP.NET 5)中嵌套路由的便捷方式是什么?

What is a convenient way of nesting routes in ASP.NET Core (previously ASP.NET 5)?

我们想要嵌套路由,因为我们有数据的层次结构。 然而,最直观的做法是用一个主控制器来控制一切。我们当然不希望那样。我们想要很好地包含作为单元的控制器(遵循 OO 原则)。

例如,我们有这样一个 API 调用:

http://domain.com/api/customers/3510/status/

我们想要一个漂亮的状态控制器,它将有一组动作来传递与状态相关的信息。

我想出了一个方法如下:

[Route("api/customers/{aId:int}/status")]
public class StatusController
{
   [HttpGet("current")]
   public string GetCurrentStatus(int aId)
   {
     return "Status customer " + aId + " is foo bar". 
   }
}

但这是正确的方法吗?或者还有其他更方便的方法吗?

路线 [Route("api/customers/{aId:int}/status")] 我觉得没问题。

MVC 6 中的约定似乎是 return IActionResult:

   [HttpGet("current")]
   public IActionResult GetCurrentStatus(int aId)
   {
     return Content("Status customer " + aId + " is foo bar"); 
   }

一个可能的选择是使用 MvcCodeRouting,它允许您将控制器嵌套到层次结构中,并且路由将自动相应地遵循(根据控制器所在的命名空间)。

不幸的是,现阶段不支持 MVC Core,但您可以对其进行逆向工程并创建升级版本(最好为项目做出贡献,这样我们其他人就可以从升级中受益).