一. 基於RouteBase擴展瀏覽器
1. 原理框架
擴展RouteBase,一樣使用的是MVC框架提供的MvcRouteHandler進行處理。ide
2. 步驟測試
1. 新建YpfRoute1類,繼承RouteBase類型,並覆寫裏面的兩個抽象方法, 在GetRouteData編寫業務邏輯,(這裏是禁止Chrome瀏覽器訪問),經過RouteData添加地址,並返回。this
1 /// <summary> 2 /// 基於RouteBase進行擴展 3 /// </summary> 4 public class YpfRoute1 : RouteBase 5 { 6 /// <summary> 7 /// 解析路由信息 8 /// </summary> 9 /// <param name="httpContext"></param> 10 /// <returns></returns> 11 public override RouteData GetRouteData(HttpContextBase httpContext) 12 { 13 //編寫本身業務邏輯(這裏禁止Chrome瀏覽器的訪問 不是很準確) 14 if (httpContext.Request.UserAgent.IndexOf("Chrome")>=0) 15 { 16 //返回指定的頁面 17 RouteData rd = new RouteData(this, new MvcRouteHandler()); 18 rd.Values.Add("controller","Route"); 19 rd.Values.Add("action", "RefuseView"); 20 return rd; 21 } 22 23 return null; 24 } 25 26 /// <summary> 27 /// 指定虛擬路徑處理(這裏暫不使用) 28 /// </summary> 29 /// <param name="requestContext"></param> 30 /// <param name="values"></param> 31 /// <returns></returns> 32 public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 33 { 34 throw new NotImplementedException(); 35 } 36 }
2. 在RouteConfig文件中新建RefuseChrome方法,並在該方法中添加YpfRoute1類。url
1 /// <summary> 2 /// 基於RouteBase進行擴展的路由 3 /// </summary> 4 /// <param name="route"></param> 5 public static void RefuseChrome(RouteCollection route) 6 { 7 route.Add("myRoute", new YpfRoute1()); 8 }
3. 在Global中將RefuseChrome方法註冊進去。spa
注意:是放到系統自帶路由註冊的上面仍是下面,哪一個在上,哪一個先執行。code
4. 測試orm
使用Chrome瀏覽器打開任何頁面,均跳轉到拒絕訪問頁面。blog
二. 基於IRouteHandler擴展
1. 原理
擴展IRouteHandler而且自定義IHttpHandler 。
2. 步驟
1. 新建YpfRoute1類,實現接口IRouteHandler,並實現裏面的GetHttpHandler方法。
2. 自定義ypfHttpHandler類,並實現IhttpHandler接口。
1 /// <summary> 2 /// 擴展IRouteHandler和自定義IHttpHandler 3 /// </summary> 4 public class YpfRoute2 : IRouteHandler 5 { 6 public IHttpHandler GetHttpHandler(RequestContext requestContext) 7 { 8 return new ypfHttpHandler(); 9 } 10 } 11 12 public class ypfHttpHandler : IHttpHandler 13 { 14 15 bool IHttpHandler.IsReusable 16 { 17 get 18 { 19 return false; 20 } 21 } 22 23 void IHttpHandler.ProcessRequest(HttpContext context) 24 { 25 string url = context.Request.Url.AbsoluteUri; 26 context.Response.Write(string.Format("這裏是ypf定製:{0}", this.GetType().Name)); 27 context.Response.Write((string.Format("當前地址爲:{0}", url))); 28 29 context.Response.End(); 30 } 31 }
3. 在RouteConfig文件中新建RegisterSpecialRoute方法,並在該方法中添加YpfRoute1類(註冊規則,並使用RouteTable往裏添加)
1 /// <summary> 2 /// 擴展IRouteHandler和自定義IHttpHandler 3 /// </summary> 4 /// <param name="routes"></param> 5 public static void RegisterSpecialRoute(RouteCollection routes) 6 { 7 Route route = new Route("Ypf/{other}",new YpfRoute2()); 8 RouteTable.Routes.Add(route); 9 }
4. 在Global中將RefuseChrome方法註冊進去,注意:是放到系統自帶路由註冊的上面仍是下面,哪一個在上, 哪一個先執行。
5. 訪問地址:http://localhost:7559/Ypf/1 ,統一跳轉到指定頁面顯示指定的信息(地址中的 1 能夠換成任何信息)