mvc-自定义Route

public class CustomerRoute : RouteBase
    {
     //从路径中解析出controller、action以及其他参数,创建RouteData(其中包括HttpHandler),然后调用HttpHandler处理请求
public override RouteData GetRouteData(System.Web.HttpContextBase httpContext) { var virtualPath = httpContext.Request.AppRelativeCurrentExecutionFilePath + httpContext.Request.PathInfo;//获取相对路径 virtualPath = virtualPath.Substring(2).Trim('/');//此时URL会是~/ca-categoryname,截取后面的ca-categoryname if (!virtualPath.StartsWith("ca-"))//判断是否是我们需要处理的URL,不是则返回null,匹配将会继续进行。 return null; var categoryname = virtualPath.Split('-').Last();//截取ca-前缀后的分类名称 //尝试根据分类名称获取相应分类,忽略大小写 var category = CategoryManager.AllCategories.Find(c => c.CategoeyName.Equals(categoryname, StringComparison.OrdinalIgnoreCase)); if (category == null)//如果分类是null,可能不是我们要处理的URL,返回null,让匹配继续进行 return null; //至此可以肯定是我们要处理的URL了 var data = new RouteData(this, new MvcRouteHandler());//声明一个RouteData,添加相应的路由值 data.Values.Add("controller", "CustomerRoute"); data.Values.Add("action", "ShowCategory"); data.Values.Add("id", category.CategoeyID); return data;//返回这个路由值将调用CategoryController.ShowCategory(category.CategoeyID)方法。匹配终止 }
    //根据RouteValueDictionary转换成url
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { //判断请求是否来源于CategoryController.Showcategory(string id),不是则返回null,让匹配继续 var categoryId = values["id"] as string; if (categoryId == null)//路由信息中缺少参数id,不是我们要处理的请求,返回null return null; //请求不是CategoryController发起的,不是我们要处理的请求,返回null if (!values.ContainsKey("controller") || !values["controller"].ToString().Equals("CustomerRoute", StringComparison.OrdinalIgnoreCase)) return null; //请求不是CategoryController.Showcategory(string id)发起的,不是我们要处理的请求,返回null if (!values.ContainsKey("action") || !values["action"].ToString().Equals("showcategory", StringComparison.OrdinalIgnoreCase)) return null; //至此,我们可以确定请求是CategoryController.Showcategory(string id)发起的,生成相应的URL并返回 var category = CategoryManager.AllCategories.Find(c => c.CategoeyID == categoryId); if (category == null) throw new ArgumentNullException("category");//找不到分类抛出异常 var path = "ca-" + category.CategoeyName.Trim();//生成URL return new VirtualPathData(this, path.ToLowerInvariant()); } }

 

转载于:https://www.cnblogs.com/kuailewangzi1212/p/3266263.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值