代码之家  ›  专栏  ›  技术社区  ›  Anand

ASP.NET核心路由错误

  •  1
  • Anand  · 技术社区  · 6 年前

    我有一条路线 http://localhost:63037/api/futuresMarginRuns/7/data 但另一个控制器api正在使用route http://localhost:63037/api/futuresMarginRuns/2018-07-11/data 无法工作,甚至未命中控制器API中的断点。 以下是api签名

        [HttpGet]
        [Route("/api/futuresMarginRuns/{id}/data")]
        public async Task<IActionResult> GetFuturesMarginRunDataAsync(long id)
        {
            var data = await _repository.GetAllAsync(id).ConfigureAwait(false);
            return Ok(data);
        }
    
        [HttpGet]
        [Route("/api/futuresMarginRuns/{runDate}/data")]
        public async Task<IActionResult> GetFuturesMarginRunDataByDateAsync(DateTime runDate)
        {
            var data = await _repository.GetAllAsync(runDate).ConfigureAwait(false);
            return Ok(data);
        }
    

    在第一种情况下,我得到了json数据,但在第二种情况下,断点没有被击中,所以看起来路由没有正确地映射到api,在这种情况下,我希望出现错误,但是我得到了空的 []

    我该如何使用api?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Becuzz    6 年前

    你需要加一些 route constraints 去你的路线。路由约束告诉路由引擎如果 id 应该是int,只有当该点中的文本可以转换为int时(类似于日期等)才匹配该路由。

    所以我会把你的路线改成:

    [HttpGet]
    [Route("/api/futuresMarginRuns/{id:long}/data")]
    public async Task<IActionResult> GetFuturesMarginRunDataAsync(long id)
    
    [HttpGet]
    [Route("/api/futuresMarginRuns/{runDate:datetime}/data")]
    public async Task<IActionResult> GetFuturesMarginRunDataByDateAsync(DateTime runDate)