在 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,但您可以对其进行逆向工程并创建升级版本(最好为项目做出贡献,这样我们其他人就可以从升级中受益).
我们想要嵌套路由,因为我们有数据的层次结构。 然而,最直观的做法是用一个主控制器来控制一切。我们当然不希望那样。我们想要很好地包含作为单元的控制器(遵循 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,但您可以对其进行逆向工程并创建升级版本(最好为项目做出贡献,这样我们其他人就可以从升级中受益).