在发现这个小技巧之前,我经常被某些问题困扰,我们以博客园为例

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/

这样就可以和各种复杂的方案说拜拜了,即使是动态添加和删除分类对应的rout也很简单,和复杂方案说886

asp.net mvc route 中新发现的小技巧的更多相关文章

  1. asp.net mvc开发过程中的一些小细节

    现在做网站用mvc越来越普及了,其好处就不说了,在这里只记录一些很多人都容易忽视的地方. 引用本地css和js文件的写法 这应该是最不受重视的地方,有同事也说我有点小题大作,但我觉得用mvc还是得有一 ...

  2. [转]在 ASP.NET MVC 4 中创建为移动设备优化的视图

    原文链接 https://msdn.microsoft.com/zh-cn/magazine/dn296507.aspx 如果深入探讨有关编写移动设备网站的常识性考虑因素,会发现其中有一种内在矛盾.  ...

  3. 在 ASP.NET MVC 项目中使用 WebForm、 HTML

    原文地址:http://www.cnblogs.com/snowdream/archive/2009/04/17/winforms-in-mvc.html ASP.NET MVC和WebForm各有各 ...

  4. asp.net mvc Route 使用自定义条件(constraints)禁止某ip登陆

    asp.net mvc Route 使用自定义条件(constraints)禁止某ip登陆 前言 本文的目的是利用Mvc route创建一个自定义约束来控制路由跳转实现禁止ip登陆,当然例子可能不合理 ...

  5. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  6. ASP.NET MVC 4中如何为不同的浏览器自适应布局和视图

    在ASP.NET MVC 4中,可以很简单地实现针对不同的浏览器自适应布局和视图.这个得归功于MVC中的"约定甚于配置"的设计理念. 默认的自适应 MVC 4自动地为移动设备浏览器 ...

  7. 在ASP.NET MVC环境中使用加密与解密

    在.NET Framework 4.5的NET框架中,在程序中加密与解密很方便.现在均学习ASP.NET MVC程序了,因此Insus.NET也在此写个学习的例子.在需要时可以参考与查阅. 写一个Ut ...

  8. 在 ASP.NET MVC 应用中使用 NInject 注入 ASMX 类型的 Web Service

    这几天,有同学问到为什么在 ASP.NET MVC 应用中,无法在 .ASMX 中使用 NInject 进行注入. 现象 比如,我们定义了一个接口,然后定义了一个实现. public interfac ...

  9. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

随机推荐

  1. sprintf_s的使用

    int sprintf_s(char *restrict buffer, rsize_t bufsz,              const char *restrict format, ...); ...

  2. 【Java环境变量的配置问题】

    首先是JVM.JRE.JDK三者之间的关系: java的跨平台性依赖于Java虚拟机:jvm(Java Virtual Machine),而jre(Java Runtime Environment,中 ...

  3. struts标签<logic:iterate>的用法

    <logic:iterate>主要用来处理在页面上输出集合类,集合一般来说是下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体用法请参考s ...

  4. Oracle备份及备份策略

    第二章. 了解备份的重要性 可以说,从计算机系统出世的那天起,就有了备份这个概念,计算机以其强大的速度处理能力,取代了很多人为的工作,但是,往往很多时候,它又是那么弱不禁风,主板上的芯片.主板电路.内 ...

  5. Sizeof与Strlen的区别与联系

    转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof    sizeof(...)是运算符,在头文件中typedef为uns ...

  6. 直接拿来用!最火的Android开源项目(二)(转)

    GitHub上的开源项目不胜枚举,通过这些项目,也能让开发者在应用开发过程中事半功倍,作为开发者的你,在用这些开源项目吗?今天我们将介绍另外20个在GitHub上备受欢迎的Android开源项目,你准 ...

  7. HDU 5876 Sparse Graph BFS 最短路

    Sparse Graph Problem Description   In graph theory, the complement of a graph G is a graph H on the ...

  8. ios摇一摇截屏代码

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  9. MapKit地图划线

    只要用于获取用户位置都要取得用户授权 #import "ViewController.h" #import <MapKit/MapKit.h> @interface V ...

  10. 使用MulticastSocket实现多点广播

    原文链接:http://hbiao68.iteye.com/blog/1943354 使用MulticastSocket实现多点广播 DatagramSocket只允许数据报发送给指定的目标地址,而M ...