【问题标题】:ASPNET Core RoutingASPNET 核心路由
【发布时间】:2020-10-02 11:04:19
【问题描述】:

我遇到了路线设置不正确的问题,我已经修复了这个问题,但我不完全理解修复工作的原因。

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

当我调用api/details/123 时,我发现找不到路由,直到我从类中删除了Route 属性。所以我猜他们是有冲突的,但为什么呢?

【问题讨论】:

    标签: asp.net-core blazor


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      端点的路由是控制器的路由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)
      {
      

      【讨论】:

        【解决方案3】:

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

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

        现在您可以调用此网址:api/Details/Detail/123

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-06
          • 2018-08-09
          • 1970-01-01
          • 1970-01-01
          • 2017-03-02
          • 2018-07-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多