创建一个类,该类继承并实现接口接口IRouteConstraint。该接口在System.Web.dll的System.Web.Routing命名空间下。事例中限制参数输入长度必须大于5,代码如下
public class InputLengthConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values,
RouteDirection routeDirection)
{
object value;
if (values.TryGetValue(parameterName, out value))
{
if (value.ToString().Length > 5)
{
return true;
}
}
return false;
}
}
打开Global.asax文件,找到RouteConfig.RegisterRoutes(RouteTable.Routes);这段代码是MVC注册路由的,进入RegisterRoutes函数,将其改为:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//注册自定义路由权限
var constraintsResolver = new DefaultInlineConstraintResolver();
constraintsResolver.ConstraintMap.Add("orderJno", typeof(InputLengthConstraint));
routes.MapMvcAttributeRoutes(constraintsResolver);
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
然后再controller中就可以使用自定义的路由参数了,只有当参数格式符合条件时,才能进入:
[Route("Right/{jno:orderJno}")]
public ActionResult Right(string jno)
{
return View();
}