asp.net mvc route 中新發現的小技巧


在發現這個小技巧之前,我經常被某些問題困擾,我們以博客園為例

image

1:是分類名稱

2:是分類url

3:點擊分類,進入的頁面,要顯示分類的名稱

4:點擊分類,進入的頁面,要用分類相關參數

在日常web的開發中,經常遇到要在頁面上顯示一個分類,然后這個分類的鏈接要包含這個分類的id等參數(例如為搜索引擎友好要包含名稱的漢語拼音),然后點擊這個分類的頁面要顯示這個分類的各種信息例如分類名稱,分類讀取搜索接口的地址和參數等。

尤其是某些變態的分類,一個條目和一個條目讀取相關信息的方式還不一樣,還可能很耗時

這個時候為了提升系統性能,經常用緩存辦法,尤其是整體高並發站點(不是某些熱數據造成的並發,而是網站整體的並發比較大),更是頭疼

我們按照web開發無限細分來看這個問題

1 直接讀取數據 ==》  數據庫連接數被占用

2 緩存到asp.net自帶的cache  ==》我經常偷懶用這個,數據庫連接數被占用的次數減少但不明顯,因為緩存的時間短(緩存長了貌似沒用)

3緩存到分布式緩存例如Memcache  ==》序列化和反序列化造成cpu上升和內網流量上升

3緩存到分布式緩存例如Memcache+本地cache緩存等  ==》方案較為復雜

直到最近寫route ,手抖了一下,以為自己寫錯了熱烈的笑臉

假設 博客園的分類是這么定義的

  public class CnblogsCate
    {
        public int id { get;set; }
        public string name { get; set; }
        public string search { get; set; }

        /*
        其他相關的屬性
         * 
        */

        public List<CnblogsCate> getALL()
        {
            List<CnblogsCate> result = new List<CnblogsCate>();
            CnblogsCate item = new CnblogsCate();
            item.id = 1;
            item.name = "test";
            item.search = "pra=1";
            result.Add(item);
            item = new CnblogsCate();
            item.id = 2;
            item.name = "test2";
            item.search = "pra=2";
            result.Add(item);
            return result;
            //return new List<CnblogsCate>
        }

    }

注冊route

           CnblogsCate  Cate=new CnblogsCate();
           var allCate= Cate.getALL();
           foreach (CnblogsCate item in allCate)
           {
               routes.MapRoute(
         "Default_" + item.id, // 路由名稱
         "Cnblog/"+item.name+"/", // 帶有參數的 URL
         new { controller = "Cnblogs", action = "Index", Cate = item } // 這里直接對參數賦值
     );
           }

這樣在控制器里面就可以直接取到想要的數據了

    public class CnblogsController : Controller
    {
        //
        // GET: /Cnblogs/

        public ActionResult Index(CnblogsCate Cate)
        {

            return View();
        }

    }
 

例如

請求:http://localhost:34197/Cnblog/test/

image

這樣就可以和各種復雜的方案說拜拜了,即使是動態添加和刪除分類對應的rout也很簡單,和復雜方案說886


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM