【问题标题】:Pagination and Pages conflict - ASP.Net Core Razor Pages conflicts with MVC controller method pagination分页和页面冲突 - ASP.Net Core Razor Pages 与 MVC 控制器方法分页冲突
【发布时间】:2019-03-17 18:24:29
【问题描述】:

在一个带有 Angular 6 spa 项目的 ASP.Net Core 2.1 中,我使用这个 AccountController.cs 方法返回了一个分页的用户列表:

[HttpGet("users")]
[Produces(typeof(List<UserViewModel>))]
public async Task<IActionResult> GetUsers()
{
    return await GetUsers(-1, -1);
}

[HttpGet("users/{page:int}/{pageSize:int}")]             <---- conflicts here
[Produces(typeof(List<UserViewModel>))]
public async Task<IActionResult> GetUsers(int page, int pageSize)
{
    var users = await _accountManager.GetUsersLoadRelatedAsync(page, pageSize);
    return Ok(Mapper.Map<List<UserViewModel>>(users));
}

在 startup.cs 我使用 MVC 如下:

app.UseMvc(routes =>
{
    routes.MapRoute("blog", "blog/{*article}", defaults: new { controller = "Blog", action = "Article" });
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});

如上所述的代码工作正常,但由于我想在我的项目中开始使用 Razor Pages,我创建了一个新的标准 Razor Pages 项目模板并将其 Pages 文件夹添加到当前项目,但只要我这样做了运行项目我得到错误,如果我再次移出 Pages 文件夹,项目开始运行而没有错误。

这是错误描述:

RouteCreationException:属性路由信息出现以下错误:

操作:'MyApiProject.Controllers.AccountController.GetUsers (MyApiProject)'

错误:属性路由 'api/Account/users/{page:int}/{pageSize:int}' 不能包含 名为“{page}”的参数。在路由模板中使用“[page]”插入 值''。

方法代码无需更改,因为它与现有的 Angular spa 一起工作得很好。那么解决方法是什么?

【问题讨论】:

    标签: c# angular asp.net-core razor-pages asp.net-core-mvc-2.1


    【解决方案1】:

    当使用 ASP.NET Core MVC Razor Pages 时,{page} 变成实际上是一个保留字,就像在使用传统 MVC 控制器和操作时 {controller} 和 {action} 一样。为了解决这个问题,您可以简单地使用其他东西来表示执行分页时所需的页码。例如:

    [HttpGet("users/{pageNumber:int}/{pageSize:int}")]
    [Produces(typeof(List<UserViewModel>))]
    public async Task<IActionResult> GetUsers(int pageNumber, int pageSize)
    {
        var users = await _accountManager.GetUsersLoadRelatedAsync(pageNumber, pageSize);
        return Ok(Mapper.Map<List<UserViewModel>>(users));
    }
    

    因为您之前使用{page} 作为路由值,将其切换为{pageNumber} 不会影响调用应用程序,因为它们没有直接使用page。如果这是一个查询字符串参数,那就另当别论了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2014-11-28
      • 1970-01-01
      • 2019-06-13
      相关资源
      最近更新 更多