如题,我现在要重写url,重写的这个方法进不去。
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
public class UserRoute : RouteBase { /// <summary> /// 生成url /// </summary> /// <param name="requestContext"></param> /// <param name="values"></param> /// <returns></returns> public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { string id = values["id"] as string ?? string.Empty; //判断是否有id参数 return nul后继续匹配 //判断是否存在controller键且为home的控制器 if (!values.ContainsKey("controler") || !values["controler"].ToString().Equals("Home", StringComparison.OrdinalIgnoreCase)) return null; //判断是否存在action键且为Test的方法 if (!values.ContainsKey("action") || !values["action"].ToString().Equals("Test", StringComparison.OrdinalIgnoreCase)) return null;// throw new ArgumentNullException("category");//找不到分类抛出异常 //开始生成url var path = "ta_t1"; //返回当前重写的url return new VirtualPathData(this, path); } /// <summary> /// 处理点击的重写url /// </summary> /// <param name="httpContext"></param> /// <returns></returns> public override RouteData GetRouteData(System.Web.HttpContextBase httpContext) { //获取地址栏中的路径 var path = httpContext.Request.AppRelativeCurrentExecutionFilePath + httpContext.Request.PathInfo; path = path.Substring(2).Trim('/');//截取获取的字符串, if (!path.StartsWith("ta_")) return null;//判断path中是否是ta_开头的格式 var lastpath = path.Split('_').Last();//获取_后面的路径 /* 其他判断逻辑 */ var data = new RouteData(this, new MvcRouteHandler());//声明一个RouteData,添加相应的路由值 data.Values.Add("controller", "Home"); data.Values.Add("action", "Test"); //data.Values.Add("id", 1); return data;//返回这个路由值将调用 } }
我将此方法类在RouteConfig中注册了
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //在这里注册我们重写的路由类 routes.Add(new UserRoute() ); routes.MapRoute( name: "Home", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new string[] { "Test.Demo.Mvc.WebUI.Controllers" } ); } }
有懂得大神嘛??
VirtualPathData 方法是用于生成 url 。 当你在cshtml文件里使用 @Url.Action() 或 @Url.RouteUrl() 等的时候,就会调用VirtualPathData方法,来生成对应的url