第十四节:再探MVC中路由的奥秘
一. 基于RouteBase扩展
1. 原理
扩展RouteBase,同样使用的是MVC框架提供的MvcRouteHandler进行处理。
2. 步骤
1. 新建YpfRoute1类,继承RouteBase类型,并覆写里面的两个抽象方法, 在GetRouteData编写业务逻辑,(这里是禁止Chrome浏览器访问),通过RouteData添加地址,并返回。
/// <summary>
/// 基于RouteBase进行扩展
/// </summary>
public class YpfRoute1 : RouteBase
{
/// <summary>
/// 解析路由信息
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
public override RouteData GetRouteData(HttpContextBase httpContext)
{
//编写自己业务逻辑(这里禁止Chrome浏览器的访问 不是很准确)
if (httpContext.Request.UserAgent.IndexOf("Chrome")>=)
{
//返回指定的页面
RouteData rd = new RouteData(this, new MvcRouteHandler());
rd.Values.Add("controller","Route");
rd.Values.Add("action", "RefuseView");
return rd;
} return null;
} /// <summary>
/// 指定虚拟路径处理(这里暂不使用)
/// </summary>
/// <param name="requestContext"></param>
/// <param name="values"></param>
/// <returns></returns>
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
throw new NotImplementedException();
}
}
2. 在RouteConfig文件中新建RefuseChrome方法,并在该方法中添加YpfRoute1类。
/// <summary>
/// 基于RouteBase进行扩展的路由
/// </summary>
/// <param name="route"></param>
public static void RefuseChrome(RouteCollection route)
{
route.Add("myRoute", new YpfRoute1());
}
3. 在Global中将RefuseChrome方法注册进去。
注意:是放到系统自带路由注册的上面还是下面,哪个在上,哪个先执行。

4. 测试
使用Chrome浏览器打开任何页面,均跳转到拒绝访问页面。

二. 基于IRouteHandler扩展
1. 原理
扩展IRouteHandler并且自定义IHttpHandler 。
2. 步骤
1. 新建YpfRoute1类,实现接口IRouteHandler,并实现里面的GetHttpHandler方法。
2. 自定义ypfHttpHandler类,并实现IhttpHandler接口。
/// <summary>
/// 扩展IRouteHandler和自定义IHttpHandler
/// </summary>
public class YpfRoute2 : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new ypfHttpHandler();
}
} public class ypfHttpHandler : IHttpHandler
{ bool IHttpHandler.IsReusable
{
get
{
return false;
}
} void IHttpHandler.ProcessRequest(HttpContext context)
{
string url = context.Request.Url.AbsoluteUri;
context.Response.Write(string.Format("这里是ypf定制:{0}", this.GetType().Name));
context.Response.Write((string.Format("当前地址为:{0}", url))); context.Response.End();
}
}
3. 在RouteConfig文件中新建RegisterSpecialRoute方法,并在该方法中添加YpfRoute1类(注册规则,并使用RouteTable往里添加)
/// <summary>
/// 扩展IRouteHandler和自定义IHttpHandler
/// </summary>
/// <param name="routes"></param>
public static void RegisterSpecialRoute(RouteCollection routes)
{
Route route = new Route("Ypf/{other}",new YpfRoute2());
RouteTable.Routes.Add(route);
}
4. 在Global中将RefuseChrome方法注册进去,注意:是放到系统自带路由注册的上面还是下面,哪个在上, 哪个先执行。

5. 访问地址:http://localhost:7559/Ypf/1 ,统一跳转到指定页面显示指定的信息(地址中的 1 可以换成任何信息)


第十四节:再探MVC中路由的奥秘的更多相关文章
- 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则
第十四节过拟合解决手段L1和L2正则 第十三节中, ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- 第三百二十四节,web爬虫,scrapy模块介绍与使用
第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...
- centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课
centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...
- 风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击
风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击 XSS钓鱼攻击 HTTP Basic Authentication认证 大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候 ...
- 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册
第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...
- 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理
第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...
- 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)
第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数 ...
随机推荐
- Docker: 构建Nginx,PHP,Tomcat基础镜像
Usage: docker build [OPTIONS] PATH | URL | - [flags] Options: -t, --tag list # 镜像名称 -f, --file strin ...
- C语言----int (*p)[4] ---思考总结
a+1 跳4个int (*a)+1 跳一个int
- c# 小数四舍五入,向上取整,向下取整,见角进元保留多个小数位数
/// <summary> /// 实现数据的四舍五入法 /// </summary> /// <param name="v">要进行处理的数据 ...
- web框架开发-分页器(Paginator)
Django有自带的分页器,可以将数据分在不同的页面中,并提供一些属性和方法实现对分页数据的操作.分页功能的类位于django/core/paginator.py中. 常用方法 # 分页器 # pag ...
- java获取类加载路径和项目根路径的5种方法
// 第一种:获取类加载的根路径 D:\IDEAWorkspace\hs-bluetooth-lock\src\applications\bluetooth-api\target\classes Fi ...
- Django view(视图)
在Django MTV模式中,View视图负责业务逻辑部分,路由系统接收到HTTP请求,并将任务分配给相应的视图函数,由视图函数来负责响应这个请求.无论视图本身包含什么逻辑,都要返回响应. 在这里HT ...
- 【Topcoder 8572】TheLuckySum
题意:给一个数\(n\),要把它分成lucky numbers的和. 问个数最少.字典序最小的方案. 思路:果断搜索.个数最少,所以迭代加深.枚举要的个数\(m\). 首先我们看\(n\)的个位.它肯 ...
- 服务端监控工具:Nmon使用方法
在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的一环.这篇博客,介绍下服务端监控工具:nmon的使用方法... 一.认识nmon 1.简介 nmon是一种在AIX与各种Linux操作系统 ...
- 深入理解 Java 基本数据类型
深入理解 Java 基本数据类型
- WPF: 自动设置Owner的ShowDialog 适用于MVVM
原文:WPF: 自动设置Owner的ShowDialog 适用于MVVM 原文地址:http://www.mgenware.com/blog/?p=339 WPF中的Windows的ShowDialo ...