【问题标题】:how to pass two parameter in route controller如何在路由控制器中传递两个参数
【发布时间】:2019-08-06 05:54:56
【问题描述】:

我想将两个参数 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 操作。

并告诉我这个错误

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

【问题讨论】:

  • 这不是发生错误的代码。
  • @SᴇM 如果它工作正常,我不会问问题
  • 发布GetActorVideos 代码。
  • @FarhadZamani 删除对_videService.GetActorVideos(...) 的调用并确认idpage 未设置为您期望的值。如果是这种情况,请使用“如何”调用 API 来更新您的问题。如另一条评论所述,您发布的代码不会引发您发布的错误。 _videoService 调用可能会引发它,但我们需要删除调用来证明这一点。
  • @FarhadZamani 如前所述,错误不在您发布的代码中。您需要一个调试器来单步调试您的代码以确定错误发生的位置(可能在startup.cs 中)。然后将该代码添加到您的问题中。就目前而言,我们无法查看错误发生的位置并提供解决方案。

标签: c# asp.net-core routes


【解决方案1】:

您的代码 sn-p 对我有用。我稍微修改了它,并在以“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);
}

【讨论】:

    【解决方案2】:

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

    [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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      相关资源
      最近更新 更多