ASP.NET Core Web API 基于聚合拆分控制器
ASP.NET Core Web API split controller based on aggregates
在我的 API 项目中,我目前有 1 个具有以下语法的控制器:
抽象基控制器
[Produces("application/json")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status406NotAcceptable)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public abstract class BaseApiController : ControllerBase
{
// ....
}
TestApiController
public class TestApiController : BaseApiController
{
// Parent action methods
[HttpGet]
[HttpPost]
...
// Child action methods
[HttpGet("{test:guid}/child")]
[HttpGet("{test:guid}/child/{id:guid}")]
...
}
这为我们提供了以下网址:
http://localhost/api/v1.0/test
http://localhost/api/v1.0/test/1
http://localhost/api/v1.0/test/1/child
http://localhost/api/v1.0/test/1/child/1
问题
如何在不中断 url 的情况下将控制器拆分为多个文件,但要有一个更清晰的概览。
所以一个控制器用于所有测试操作,另一个控制器用于所有子操作。
我不是在谈论丰富的控制器经验(我已经做过一些),但我想你会发现控制器就是控制器 - 因为没有简单的方法来拥有控制器 -不是 1:1.
的路线
但是,如果您想让控制器更易于管理,您可以让它们尽可能精简,并将大部分代码放入控制器调用的 类 中。
或者,与其尝试 split/decompose 控制器而非路线,不如重新设计整体 API design/structure 以便您拥有更多控制器和路线。 Interface Segregation Principle 想到这里(是的,它是从面向对象中诞生的,但原则仍然适用)。
在一天结束时,您有呼叫进入 API 由他们的路由定义,然后转到控制器 - 这一切看起来如何(结构化)并不重要只要 API 足够明智、直观且符合目的。
在互联网上进行更多搜索后,我发现了以下有趣的 Nuget 包:
有关此的源代码和示例可在此处找到:
这使我们能够将控制器分成文件夹,并为每个操作单独 class 以提供我们想要的用途。
在我的 API 项目中,我目前有 1 个具有以下语法的控制器:
抽象基控制器
[Produces("application/json")]
[Route("api/v{version:apiVersion}/[controller]")]
[ApiController]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status406NotAcceptable)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public abstract class BaseApiController : ControllerBase
{
// ....
}
TestApiController
public class TestApiController : BaseApiController
{
// Parent action methods
[HttpGet]
[HttpPost]
...
// Child action methods
[HttpGet("{test:guid}/child")]
[HttpGet("{test:guid}/child/{id:guid}")]
...
}
这为我们提供了以下网址:
http://localhost/api/v1.0/test
http://localhost/api/v1.0/test/1
http://localhost/api/v1.0/test/1/child
http://localhost/api/v1.0/test/1/child/1
问题
如何在不中断 url 的情况下将控制器拆分为多个文件,但要有一个更清晰的概览。
所以一个控制器用于所有测试操作,另一个控制器用于所有子操作。
我不是在谈论丰富的控制器经验(我已经做过一些),但我想你会发现控制器就是控制器 - 因为没有简单的方法来拥有控制器 -不是 1:1.
的路线但是,如果您想让控制器更易于管理,您可以让它们尽可能精简,并将大部分代码放入控制器调用的 类 中。
或者,与其尝试 split/decompose 控制器而非路线,不如重新设计整体 API design/structure 以便您拥有更多控制器和路线。 Interface Segregation Principle 想到这里(是的,它是从面向对象中诞生的,但原则仍然适用)。
在一天结束时,您有呼叫进入 API 由他们的路由定义,然后转到控制器 - 这一切看起来如何(结构化)并不重要只要 API 足够明智、直观且符合目的。
在互联网上进行更多搜索后,我发现了以下有趣的 Nuget 包:
有关此的源代码和示例可在此处找到:
这使我们能够将控制器分成文件夹,并为每个操作单独 class 以提供我们想要的用途。