ASPNET核心路由



我遇到了一个路由设置不正确的问题,我已经修复了这个问题,但我不完全理解为什么修复有效。

[ApiController]
[Route("api/[controller]")
public class DetailsController : ControllerBase
{
[HttpGet]
[Route("api/[controller]/{transactNo}")]
public IActionResult Detail(int transactNo)
{
...

当我调用api/details/123时,我得到的路由找不到,直到我从类中删除了Route属性。所以我想他们是矛盾的,但为什么呢?

在控制器上放置RouteAttribute与在操作上放置不同。

  • 在控制器上,它定义了属于该控制器的所有操作都将以其为前缀的路由
  • 在操作中,它定义要与带前缀的路由连接的路由

这意味着当您添加这两个属性时,您可以在以下位置调用操作:

https://localhost:44338/api/details/api/details/1
^^^^^^^^^^^ ^^^^^^^^^^^^^
from controller         ^
from action

端点的路由是控制器的路由api/[controller]与操作的路由api/[controller]/{transactNo}

在您的情况下,端点的路由是api/[controller]/api/[controller]/{transactNo}

你需要简化行动的路线,比如:

[HttpGet]
[Route("{transactNo}")]
public IActionResult Detail(int transactNo)
{

如果只想从操作重新定义端点的路由,则操作的路由必须以/:开始

[HttpGet]
[Route("/api/[controller]/{transactNo}")]
public IActionResult Detail(int transactNo)
{

您可以将操作中的路由属性替换为[HttpGet("{transactNo}")],并将控制器上的路由属性更改为[Route("api/[controller]/[action]")]

[ApiController]
[Route("api/[controller]/[action]")]
public class DetailsController : ControllerBase
{
[HttpGet("{transactNo}")]
public IActionResult Detail(int transactNo)
{
...
}
}

现在你可以调用这个url:api/Details/Detail/123

相关内容

  • 没有找到相关文章

最新更新