zoukankan      html  css  js  c++  java
  • URL路径优化

    项目类型 mvc3

     流程:

     

    1.路由设置

       网站所有的路径都经过 global.asax 文件,想做好url优化,路由设置是关键,

      打开global.asax.cs,可以看到 默认的Route name为 default 的路由设置,在此路由上写我们的路由设置,

     msdn可以找到详细的关于 routes.MapRoute(),方法的多种重载说明

    比如:

    "关于我们" 使用拼音请求路径  如 关于我们:

    http://www.yunjiw.com/about/GuanYuWoMen

     这是云集中" 关于我们"的路由设置

    routes.MapRoute(
               "about", // Route name
               "about/{txt}", // URL 参数设置, 前缀是about
               new { controller = "Aboutyunji", action = "AboutlIndex", txt = UrlParameter.Optional },//控制器和方法我们可以不写在url里,只要有符合条件的路//由就可以
               new[] { "eBuul.CESNS.WebSite.Controllers" }
           );

    这个路由,负责网站所有url前缀是 about/* 的路径 提交到Aboutyunji控制器的AboutlIndex方法中

     2.解析url

    AboutlIndex 方法中如下:

     public ActionResult AboutlIndex(string txt)
            {  
                //关于我们的子项ID
                int id = 0;
                //不为空
                if (!string.IsNullOrEmpty(txt))
                {  
                    //解析传递过来的参数,并且找到ID
                   SpellName name = SpellExpand.Instatce().GetAboutBySpell(txt, out id);
              
                }
                //所有关于我们的子项
                List<CMS> cms = ap.GetCMS();
                //如果没有参数,赋ID为默认值
                id = id == 0 ? cms.First().ID : id;
               
                ViewBag.id = id;
                ViewBag.cms = cms.Where(a => a.ID == id).First();
                return View(cms);
            }

    在上面的方法中,关键是解析参数 ,解析参数的方法GetAboutBySpell 如下:

          /// <summary>
          /// 处理关于我们
          /// </summary>
          /// <param name="spell">拼音参数</param>
          /// <param name="ID">拼音参数ID</param>
          /// <returns></returns>
            public SpellName GetAboutBySpell(string spell, out int ID)
          {

              if (ExistsSpell(aboutSpellXml, spell, out ID))
              {
                  return SpellName.AboutSpell;
              }
              return SpellName.NoSpell;
          }

    //SpellName 是自定义的enum类,用来标示参数的类型,因为有很多需要优化的,existsSpell()方法如下:

           /// <summary>
            /// 是否存在
            /// </summary>
            /// <param name="xml">查找的数据源</param>
            /// <param name="spell">拼音</param>
            /// <param name="id">拼音参数的ID</param>
            /// <returns></returns>
            public bool ExistsSpell(XElement xml,string spell, out int id)
          {
            //讲所有"关于我们"的子项,使用xml保存到静态类中,也可以使用字典类型,xml没有保存到文件,值保存到静态类中了
              XElement xel = xml.Elements(EntityTreeNodeName).Where(a => a.Value.ToLower() == spell.ToLower()).FirstOrDefault();
              if (xel == null)
              {
                  id = 0;
                  return false;
              }
              id = (int)xel.Attribute(TreeNodeAttributeName);
              return true;
          }

    //xml集合 aboutSpellXml 写成类中的静态属性

     aboutSpellXml = new XElement("Root", from a in db.CMS.AsEnumerable() orderby a.ID select new XElement(EntityTreeNodeName, a.CMSTitle.Convert(), new XAttribute(TreeNodeAttributeName, a.ID)));

    //查询条件的集合之所以写成静态,因为查询条件是不变的,变动的只是组合方式

    3.生成url

    //生成查询条件的集合,在网站中,只生成一次,可以放到 路由设置里面, 

    //处理完请求后,页面返回响应, 在.cshtml页面上

    <!--新版 关于我们 -->
    @model List<eBuul.CESNS.Model.CMS>
               
    @foreach (eBuul.CESNS.Model.CMS item in Model)
    {
        <a href="@Url.Content(string.Format("~/about/{0}", item.CMSTitle.Convert()))">@item.CMSTitle</a> 
    }
     

    //item.CMSTitle.Convert() CMSTitle关于我们的子类的名称,使用Convert()自定义的扩展方法转成拼音参数

    这样我们就完成了简单的url优化

  • 相关阅读:
    【算法系列学习】Dijkstra求最短路 [kuangbin带你飞]专题四 最短路练习 D
    【算法系列学习】Dijkstra算法变形 [kuangbin带你飞]专题四 最短路练习
    【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A
    【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 G
    【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F
    【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 E
    【算法系列学习】状压dp [kuangbin带你飞]专题十二 基础DP1 D
    【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C
    【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 B
    【算法系列学习】DP和滚动数组 [kuangbin带你飞]专题十二 基础DP1 A
  • 原文地址:https://www.cnblogs.com/Fyhong/p/2823341.html
Copyright © 2011-2022 走看看