【问题标题】:ASP.NET Core routing errorASP.NET Core 路由错误
【发布时间】:2018-12-19 20:07:08
【问题描述】:

我有一个类似 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 如何工作?

谢谢

【问题讨论】:

    标签: asp.net-core asp.net-core-webapi


    【解决方案1】:

    您需要在路线中添加一些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)
    

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2017-02-03
      • 2019-03-20
      • 2021-09-04
      • 2016-10-22
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      相关资源
      最近更新 更多