我有一个像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 回答
您需要在路线中添加一些路线限制。路由约束告诉路由引擎,如果
id
应该是一个 int,只有当该点中的文本可以转换为 int(并且类似于日期等)时才匹配该路由。所以我会将您的路线更改为以下内容: