如何在路由控制器中传递两个参数

时间:2019-08-06 05:54:56

标签: c# asp.net-core routes

我想将两个参数idpage传递给动作。但是当我使用此代码

        [HttpGet]
        [Route("Actor/{id:int}/{page:int}")]
        public async Task<IActionResult> Actor(int id, int page, CancellationToken cancellationToken )
        {
            var data = await _videoService.GetActorVideos(id, page, cancellationToken);
            return View(data);
        }

程序启动时发生路由错误。它永远不会到达_videoService行,并且不会执行Actor操作。

告诉我这个错误

  

索引(从零开始)必须大于或等于零且小于参数列表的大小。

2 个答案:

答案 0 :(得分:1)

您的代码段对我有用。我对其进行了少许修改,并在以“ var data”开头的行上设置了一个断点。如果我导航到通过浏览器解析为该路由的URL,则所有参数都具有一个值。

[HttpGet]
[Route("Actor/{id:int}/{page:int}")]
public async Task<IActionResult> Actor(int id, int page, CancellationToken cancellationToken )
{
    var data = (id, page, cancellationToken);
    return View(data);
}

答案 1 :(得分:1)

您可以通过查询传递参数。

[HttpGet]
        [Route("Actor/{id:int}")]
        public async Task<IActionResult> Actor(int id, int page = 1, CancellationToken cancellationToken = default)
        {
            var data = await _videoService.GetActorVideos(id, page, cancellationToken);  
            return View(data);
        }

使用查询字符串作为页面 这样。