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. Struts2 的 配置

    三.Struts2配置 Struts2的核心配置文件 1.名称和位置是固定的   在src下struts.xml 2.Struts根标签 Package Action Result Action Pa ...

  2. 计算概论(A)/基础编程练习(数据成分)/3:整数的个数

    #include<stdio.h> int main() { ] = {}; // 输入k个正整数 scanf("%d",&k); // 循环读入和进行算术 w ...

  3. Linux环境nginx的安装

    安装Nginx前需要编译环境和库文件支持: 1.安装make: yum -y install openssl openssl-devel yum -y install gcc automake aut ...

  4. P3302 [SDOI2013]森林(主席树+启发式合并)

    P3302 [SDOI2013]森林 主席树+启发式合并 (我以前的主席树板子是错的.......坑了我老久TAT) 第k小问题显然是主席树. 我们对每个点维护一棵包含其子树所有节点的主席树 询问(x ...

  5. intel webrtc 部署

    org link conference server Configure the MCU server 1. set the maximum numbers of open files, runnin ...

  6. 20145320《网络对抗》注入Shellcode并执行

    20145320注入Shellcode并执行 准备一段Shellcode 首先先准备一段C语言代码:这段代码其实和我们的shell功能基本一样 为了之后能够看到反汇编的结果,这次采用的静态编译.正常返 ...

  7. Codeforces Round #427 (Div. 2) Problem A Key races (Codeforces 835 A)

    Two boys decided to compete in text typing on the site "Key races". During the competition ...

  8. grub基本应用

    一.基本概念 GRUB(boot  loader):  GRand Unified Bootloader 两个版本: grub .x: grup legacy grub .x: grub2 grub ...

  9. 如何使用jqueryUi的datepicker日历控件?

    参考: http://www.jb51.net/article/85007.htm 这里的日历控件是, 基于jquery的jqureyui中的一个 widget. 需要js 文件: 外部的js文件, ...

  10. “64位调试操作花费的时间比预期要长",无法运行调试解决办法

    以管理员身份在命令提示符那里打入如下命令: netsh winsock reset catalognetsh int ip reset reset.log hit 或者是 打开Microsoft Vi ...