zoukankan      html  css  js  c++  java
  • 从C#角度 理解MVC原理

    从C#角度 理解MVC原理:从view上请求到controller组织model,反映到view上

    1、请求被UrlRoutingModule部件拦截——通过在Init()方法里注册HttpApplication对象的PostResolveRequestCache事件来实现拦截;

    2、封装请求上下文HttpContext,成为HttpContextWrapper对象——UrlRoutingModule的Init()方法中调用事件;

    3、根据当前HttpContext,从Routes集合中得到与当前请求URL相符合的RouteData对象——UrlRoutingModule的PostResolveRequestCache()方法;

    4、将HttpContext请求和RouteData对象封装成RequestContext对象——UrlRoutingModule的PostResolveRequestCache()方法;

    5、根据RequestContext对象,从RouteData的RouteHandler中获取IHttpHandeler——routeData.RouteHandler.GetHttpHandler(RequestContext)方法返回的是MVCHandler(继承IHttpHandler);

    6、把请求交给MvcHandler(继承IHttpHandler)——context.RemapHandler(httpHandler),去执行IHttpHandler 的ProcessRequest(context)方法,处理http请求;

    7、通过反射激活具体controller,执行具体action,返回model数据,显示在视图上。

    {

    7.1 ProcessRequestInit()方法,获取当前上下文HttpContext;

    7.2 从路由对象RouteData中获取当前请求Controller名称——this.RequestContext.RouteData.GetRequiredString("controller");

    7.3 获取Controller工厂对象;

    7.4 根据RequestContext请求和Controller名称,从Controller工厂创建具体Controller对象;

    7.5 执行控制器的Action——controller.Execute(context.Request.RequestContext) { requestContext.RouteData.GetRequiredString("action");}

    }

    总结: UrlRoutingModule拦截http请求,根据HttpContext请求,从RouteCollection中,找到RouteData对象,把请求和对象封装为RequestContext请求,再从RouteData对象找到MvcHandler,由UrlRoutingModule转到了MvcHandler;MvcHandler根据HttpContext,从RouteData对象中获取当前请求Controller名称,获取Controller工厂对象,创建具体Controller对象,执行具体action,返回model数据,显示在视图上。

    注:大家可以参考 懒得安分 博主的mvc原理,讲得太好了。

  • 相关阅读:
    Angular的执行顺序
    小程序地理位置授权,以及无法打开授权弹框的解决办法
    当需要对一个集合遍历删除元素的时候,都应该倒着删
    .net core部署在CentOS上时关于使用GDI报错的问题
    FactoryMethod(工厂方法模式)
    SimpleFactory(简单工厂模式)
    .net core3.1中swagger的使用
    使用HtmlAgilityPack开发爬虫筛选HTML时,关于xpath的坑
    在centos7.x环境中SQL Server附加数据库
    centos7.x中安装SQL Server
  • 原文地址:https://www.cnblogs.com/uicodeintoworld/p/8950877.html
Copyright © 2011-2022 走看看