您的位置:首页 > 其它

MVC自定义路由参数

2016-02-16 17:13 309 查看
创建一个类,该类继承并实现接口接口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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: