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

 

转载于:https://www.cnblogs.com/uicodeintoworld/p/8950877.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值