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优化

 

 

posted @ 2012-12-18 15:06  键盘上的考拉  阅读(312)  评论(0编辑  收藏  举报