asp.net-mvc - 我可以使用 MVC 路由限制页码吗?

标签 asp.net-mvc pagination asp.net-mvc-routing

我的网址是这样的:

/category/page-#

/tag/product/page-#

......

我可以使用MVC路由来限制页码吗? 我想做这样的事情:

routes.MapRoute(
  name: "limitPaging",
  url: "*/page-{pageNumber}",
  defaults: new { controller = "Error", action = "P404", }, 
            new { pageNumber = @"\d+" }, 
            new { pageNumber > 200 }
);

谢谢

最佳答案

您可以创建自定义路由约束(一个实现 IRouteConstraint 的类)

public class LessThanPage : IRouteConstraint
{
  private int _maxPage;

  public LessThanPage(int maxPage)
  {
    _maxPage = maxPage;
  }

  public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
  {
    return Convert.ToInt32(values[parameterName].ToString()) <= _maxPage;
  }
}

routes.MapRoute(
  name: "limitPaging",
  url: "*/page-{pageNumber}",
  defaults: new { controller = "Error", action = "P404", }, 
  constraints: new { pageNumber > new LessThanPage(200) }
);

您也可以使用此方法来验证参数是否为数字,从而删除正则表达式约束

关于asp.net-mvc - 我可以使用 MVC 路由限制页码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357931/

相关文章:

c# - 将 Web 引用复制到新项目

javascript - setState 开始在 React.js 中递归工作

node.js - 如何从 NodeJS(npm Twitter 模块)中的 Twitter api 迭代光标响应对象?

c# - 使用 GridView 中的分页在 UWP 中加载图像

具有精确匹配约束的 ASP.NET MapRoute

c# - 如何在 Entity Framework 的列中选择不同的值?

asp.net-mvc - 使用多上下文应用程序自定义 ASPNET Identity 一对多关系

javascript - 如何从 MVC View 中删除整个 div?

c# - 自定义路由上未调用 GetVirtualPath

asp.net-mvc - 使用 Angular 和 ASP.NET MVC(不是 SPA)的 SEO