• 从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原理,讲得太好了。

  • 相关阅读:
    Wauzh原理简析及audit规则风险评估
    浅析这句经常在框架中出现的JS代码加深对bind的理解
    浅析如何做web安全问题
    浅析JavaScript到底是什么
    浅析webpack异步加载原理及分包策略
    浅析JavaScript的执行机制
    浅析如何提高代码可读性复用性拓展性
    浅析代码编译过程
    浅析JavaScript的7种异常类型及如何快速排查
    浅析浏览器是如何调度进程和线程的
  • 原文地址:https://www.cnblogs.com/uicodeintoworld/p/8950877.html
Copyright © 2020-2023  润新知