zoukankan      html  css  js  c++  java
  • Request请求过来之后,MVC的路由匹配处理过程 + Mvc路由匹配的自定义扩展

    1. http请求为什么要走路由匹配?

     http请求处理环节非常多->会把这些环节处理封装成事件event-->ihttpmoudle可以在网站启动时给事件注册动作,网站i懂得时候回加载他的init方法

     -->那么在请求进来后,会完成module注册的动作->UrlRoutingModule注册动作--》请求进来后就在这里完成了对路由规则的匹配

    2.Request请求过来之后,Mvc的路由匹配处理过程

     在Application_start方法中注册路由,
    -->在路由的配置文件中添加路由到RouteCollection,然后更具添加路由的先后顺序去匹配路由(BrowserRoute自定义)
    -->匹配路由之后,更具当前路由,利用MvcRouteHandle生成IHttpHandler
    -->利用HttpHandle调用对应的控制器和Action

    3. 源码分析和扩展

    1).如果路由匹配没有结果,那么什么事也不会发生,继续之前的流程(asp.net)
    2).如果当前请求指向一个具体的物理文件,就return null
    ***1+2 所以,webform在MVC也是可以共存的 -->http://localhost:7088/webform1.aspx
    3).路由是foreach迭代匹配的,遇到第一个吻合的,直接结束
    4).通过GetRouteData完成匹配---路由扩展类BrowserRoute
      4.1) 在路由匹配的时候,修改了匹配方式,可以匹配请求中的任何信息,完成跳转
    5). 请求发过来之后是路由匹配之后,怎么到达控制器和Action?
      在MvcRouteHandler中的方法GetHttpHandler实现的--->扩展该方法在类CustomRouteHandle
       ***将MvcRouteHandler换成CustomRouteHandle,就可以自己按照自己的想法返回想返回的东西,调用想调用的控制器和action方法

    4.代码层面实现MVC路由匹配的扩展

    1)在路由配置文件中向RouteCollection添加自定义路由

     2)自定义路由继承RouteBase,并且重写GetRouteData方法,创建自己的RouteData的时候如果调用的是默认的MvcRouteHandler,那么RouteData必须有value值

     3)自定义路由继承RouteBase,并且重写GetRouteData方法,创建自己的RouteData的时候如果调用的是自定义IRouteHandler

     4) 自定义继承自接口IRouteHandler的类CustomRouteHandler,实现GetHttpHandle方法

     5) 自定义继承自接口IHttpHandler的类CustomHttpHandler,实现ProcessRequest方法,将IsReusable改为true

  • 相关阅读:
    Oracle中查看建立索引和使用索引的注意点
    一个父亲的教育札记——leo鉴书58
    puma 配置,启动脚本
    HDU 6003 Problem Buyer
    c# 类间关系
    前台线程和后台线程总结
    多线程学习进程
    进程类的使用
    c#异步编程
    【程序17】
  • 原文地址:https://www.cnblogs.com/fblogs/p/12292250.html
Copyright © 2011-2022 走看看