Global.asax 是 程序入口文件

路由配置   为什么localhost:8088/Home/Index/1 能返问到我们写的

     会去掉前缀跟端口号  变成Home/Index/1 用这个跟路由规则进行匹配

**************路由扩展的三大层面

1. 直接用routers.MapRoute进行扩展   (这里定义的规则在源码中就是生成一个Route)

2. 扩展Route

  2.1 创建一个扩展规则 添加到RouteData中  这个对象就是存放的路由规则

      只要发起请求的浏览器版本为这个的  给他指定路由规则

    public class MyRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
if (httpContext.Request.UserAgent.IndexOf("Chrome71.0.3578.98") >= )
{
RouteData rd = new RouteData(this, new MvcRouteHandler());
rd.Values.Add("controller", "Jcb");
rd.Values.Add("action", "Index");
return rd;
}
return null;
} public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
//这里要改成返回null 不然会报错
return null;
}
}

  2.2在RouteConfig中把对象添加到RouteCollection中

    /// <summary>
/// 路由配置
/// </summary>
public class RouteConfig
{
public static void RegisterMyRoutes(RouteCollection routes)
{
routes.Add(new MyRoute());
}

  2.3在Globl启动配置中注册路由

        protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();//注册区域路由
GlobalConfiguration.Configure(WebApiConfig.Register);//注册webapi路由
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);// RouteConfig.RegisterMyMVCHandler(RouteTable.Routes);
RouteConfig.RegisterMyRoutes(RouteTable.Routes);
RouteConfig.RegisterRoutes(RouteTable.Routes);//注册路由
BundleConfig.RegisterBundles(BundleTable.Bundles);
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory());//替换默认的控制器工厂 //IOCConfig.InitIOCContainer();
}

3.扩展Handler 替换掉MVC框架中的MVCHandler

  3.1.配置扩展的Handler

      只要访问的地址 控制器是Jcb 就使用自定义的Handler来处理这次请求   之间不用MVC内置的Handler

    /// <summary>
/// 扩展IRouteHandler,
/// 扩展IHttpHandler
/// </summary>
public class ElevenRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new ElevenHttpHandler(requestContext);
}
} /// <summary>
/// 还是我们熟悉的handler
/// </summary>
public class ElevenHttpHandler : IHttpHandler
{
public ElevenHttpHandler(RequestContext requestContext)
{
Console.WriteLine("构造我的Handler");
} public void ProcessRequest(HttpContext context)
{
string url = context.Request.Url.AbsoluteUri;
context.Response.Write(string.Format("这里是我的定制:{0}", this.GetType().Name));
context.Response.Write((string.Format("当前地址为:{0}", url))); context.Response.End();
} public virtual bool IsReusable
{
get
{
return false;
}
}
}

  3.2.在RouteConfig配置中添加

        public static void RegisterMyMVCHandler(RouteCollection routes)
{
routes.Add(new Route("Jcb/{*Info}", new ElevenRouteHandler()
));
}

  3.3在Globl中注册

        protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();//注册区域路由
GlobalConfiguration.Configure(WebApiConfig.Register);//注册webapi路由
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);// RouteConfig.RegisterMyMVCHandler(RouteTable.Routes);
RouteConfig.RegisterMyRoutes(RouteTable.Routes);
RouteConfig.RegisterRoutes(RouteTable.Routes);//注册路由
BundleConfig.RegisterBundles(BundleTable.Bundles);
ControllerBuilder.Current.SetControllerFactory(new UnityControllerFactory());//替换默认的控制器工厂 //IOCConfig.InitIOCContainer();
}

MVC路由 路由的三种扩展 替换MVC内置的Handler的更多相关文章

  1. WPF路由事件二:路由事件的三种策略

    一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件 ...

  2. MVC异步AJAX的三种方法(JQuery的Get方法、JQuery的Post方法和微软自带的异步方法)

    异步是我们在网站开发过程中必不可少的方法,MVC框架的异步方法也有很多,这里介绍三种方法: 一.JQuery的Get方法 view @{ Layout = null; } <!DOCTYPE h ...

  3. jquery 绑定,mvc和webform的三种方式

    asp.net里的绑定方式,on的绑定方式无效 $('#SelCommandType').bind('click', function () { }); mvc里的绑定方式 $('#DownList' ...

  4. 三种扩展 Office 软件功能的开发模型对比 – Office Add-In Model, VBA 和 VSTO

    当 Office 用户需要针对文档自定义新功能时,可以求助于 VBA 或者 VSTO 两种方式.Office 2013 富客户端以后,微软为 Office 平台上的开发者提供了一种新模型 --- Of ...

  5. SQL join 三种扩展用法

    以前学习,只知道  LEFT JOIN.RIGHT JOIN.INNER JOIN.FULL  JOIN,共四种集合,然而加上一些条件,可以组合成另外三种集合,直接上图.

  6. ASP.NET MVC Display Mode 移动端视图 配置对微信内置浏览器的识别

    最近在捣鼓一个稍微有点low的商城网站,没有计划做app却要求有个wap版,而前端又没有做成响应式,时间WTF,直接利用了asp.net mvc的Display Mode Provider. 使用方式 ...

  7. vue之路由传参三种基本方式

    现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click= ...

  8. 一 &#183; 路由事件的三种方式/策略(冒泡 直接 隧道)

    WPF中的路由事件是沿着VisualTree传递的,作用是用来调用应用程序的元素树上的各种监听器上的处理程序. (1)冒泡,这种事件处理方式是从源元素向上级流过去,直到到达根节点即顶层节点,一般为最外 ...

  9. MVC 添加数据的三种方法

    1 通过Request接收数据,进行添加 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<d ...

随机推荐

  1. 原生Ajax和jqueryAjax写法

    原生写法: $('#send').click(function(){ //请求的5个阶段,对应readyState的值 //0: 未初始化,send方法未调用: //1: 正在发送请求,send方法已 ...

  2. 2019/3/20 wen 流程控制

  3. JDK源码之ThreadLocal

    1.定义 ThreadLocal是线程变量,就是说每一个线程都有对应的该变量副本,线程修改该变量时,线程与线程之间的变量是相互隔离的,互相并看不见.这个结构附带在线程上,一个线程可以根据ThreadL ...

  4. setfacl 设置文件访问控制列表

    setfacl 设置文件访问控制列表 用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 参数: -m, --modify=acl 更改文件的访问控 ...

  5. 01: Django rest framework 基础

    1.1 RESTful API设计规范 参考地址: http://www.cnblogs.com/wupeiqi/articles/7805382.html   1.API与用户的通信协议,总是使用H ...

  6. 集合框架-Collection与List集合

    对象数组的内存图解: 集合的继承体系图解: * 数组和集合的区别? * A:长度区别 * 数组的长度固定 * 集合长度可变 * B:内容不同 * 数组存储的是同一种类型的元素 * 而集合可以存储不同类 ...

  7. java利用poi生成excel文件后下载本地

    1.该功能需要poi的jar包,链接: http://pan.baidu.com/s/1migAtNq 密码: 38fx. 2.首先新建一个实体类,用以存放单个数据 public class Test ...

  8. ODAC(V9.5.15) 学习笔记(三)TOraSession(1)

    1. 连接相关 名称 类型 说明 ConnectDialog 执行连接对话框控件 Connected Boolean 连接状态,通过函数Connect和Disconnect连接或关闭数据库连接,并触发 ...

  9. Bootstrap3基础 form-group 输入框之间出现间隔

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  10. Git 配置命令设置

    目录 查看配置文件路径: 查看其他配置命令: 修改配置文件默认路径: 查看配置文件路径: 查看系统级别配置: git config -e –-system D:/Program Files/Git/m ...