首页 新闻 会员 周边

.net mvc中重写url问题

0
悬赏园豆:5 [已解决问题] 解决于 2017-05-26 15:48

如题,我现在要重写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;//返回这个路由值将调用
        }

       
    }
View Code

 

 

我将此方法类在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" }
            );
        }
    }

有懂得大神嘛??

mvc
龙益阳的主页 龙益阳 | 初学一级 | 园豆:140
提问于:2017-05-25 19:39
< >
分享
最佳答案
0

VirtualPathData 方法是用于生成 url 。 当你在cshtml文件里使用 @Url.Action() 或 @Url.RouteUrl() 等的时候,就会调用VirtualPathData方法,来生成对应的url

收获园豆:5
为码一生 | 菜鸟二级 |园豆:259 | 2017-05-26 15:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册