首页 文章

ASP.NET 核心路由错误

提问于
浏览
1

我有一个像http://localhost:63037/api/futuresMarginRuns/7/data这样的路由,但是路由http://localhost:63037/api/futuresMarginRuns/2018-07-11/data的另一个控制器 API 不起作用,即使控制器 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 回答

  • 2

    您需要在路线中添加一些路线限制。路由约束告诉路由引擎,如果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)
    

相关问题