【问题标题】:What is a convenient way of nesting routes in ASP.NET Core (previously ASP.NET 5)?在 ASP.NET Core(以前的 ASP.NET 5)中嵌套路由的便捷方式是什么?
【发布时间】:2016-04-28 20:11:50
【问题描述】:

我们想要嵌套路由,因为我们有数据的层次结构。 然而,这样做的直观方法是拥有一个控制一切的主控制器。我们当然不希望这样。我们想要包含良好的单元控制器(遵循 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". 
   }
}

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

【问题讨论】:

    标签: c# asp.net-mvc-routing url-routing asp.net-core


    【解决方案1】:

    [Route("api/customers/{aId:int}/status")] 的路线在我看来还可以。

    尽管 MVC 6 中的约定似乎是返回 IActionResult

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

    【讨论】:

    • IActionResult 大部分时间只有在 WebApplication 中使用它时,在 WebApi 中,您可以返回任何您想要的东西。大多数时候它会被转换成 JSON/XML/等。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2014-10-02
      • 2021-01-29
      • 2017-04-13
      相关资源
      最近更新 更多