ROUTING
在 .NET Core Web API 项目中,我们应该使用属性路由代替传统路由,这是因为属性路由可以帮助我们匹配路由参数名称与 Action 内的实际参数方法。另一个原因是路由参数的描述,对我们而言,一个名为 "ownerId" 的参数要比 "id" 更加具有可读性。
我们可以使用 [Route] 属性来在控制器的顶部进行标注:
[Route("api/[controller]")] public class OwnerController : Controller { [Route("{id}")] [HttpGet] public IActionResult GetOwnerById(Guid id) { } }
还有另一种方式为控制器和操作创建路由规则:
[Route("api/owner")] public class OwnerController : Controller { [Route("{id}")] [HttpGet] public IActionResult GetOwnerById(Guid id) { } }
对于这两种方式哪种会好一些存在分歧,但是我们经常建议采用第二种方式。这是我们一直在项目中采用的方式。
当我们谈论路由时,我们需要提到路由的命名规则。我们可以为我们的操作使用描述性名称,但对于 路由/节点,我们应该使用 NOUNS 而不是 VERBS。
一个较差的示例:
[Route("api/owner")] public class OwnerController : Controller { [HttpGet("getAllOwners")] public IActionResult GetAllOwners() { } [HttpGet("getOwnerById/{id}"] public IActionResult GetOwnerById(Guid id) { } }
一个较好的示例:
[Route("api/owner")] public class OwnerController : Controller { [HttpGet] public IActionResult GetAllOwners() { } [HttpGet("{id}"] public IActionResult GetOwnerById(Guid id) { } }