HTML5技术

MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则) - 懒得安分(4)

字号+ 作者:H5之家 来源:H5之家 2016-11-03 18:00 我要评论( )

看到这里应该知道上文中 SwiftRouteTable 、 SwiftRouteCollection 、 SwiftRoute 三个类的用处了吧,原来在这里。IRouteHandler的实例new MvcRouteHandler()也是在这里写入的。 然后启动项目,我们默认访问:16792/

看到这里应该知道上文中 SwiftRouteTable 、 SwiftRouteCollection 、 SwiftRoute 三个类的用处了吧,原来在这里。IRouteHandler的实例new MvcRouteHandler()也是在这里写入的。

然后启动项目,我们默认访问:16792/Home/bootstrapTest这个地址,我们来看具体的过程:

1、启动项目,首先进到全局配置文件的Application_Start()方法

这里告诉我们在SwiftRouteTable.Routes这个全局静态变量里面,已经保存了路由规则、默认路由、RouteHandler对象三个重要的信息。这三个信息后面都会用到。

2、然后请求进到UrlRoutingModule里面,取SwiftRouteCollection的值:

我们看到,这里的SwiftRouteCollection的值就是在全局配置文件里面配置的类型。

3、然后请求进到SwiftRouteCollection类的GetRouteData()方法里面。这个方法的作用很明显,就是解析当前的请求的url,从中获取当前的controller、action、参数等信息。这个方法执行完之后得到的SwiftRouteData对象,结果如下:

这个对象包含两个属性,RouteHandler和当前请求的路由表。 4、通过步骤3知道,当前的swiftRouteData对象包含了RouteHandler对象, IRouteHandler routeHandler = routeData.RouteHandler; 结果如下:

5、得到RouteHandler对象之后,就是从该对象的GetHttpHandler()方法里面得到当前的HttpHandler。

这个应该不难理解,将routeData和context传入MvcHandler里面。这就是为什么之前MvcHandler里面有一个两个参数的构造函数的原因。 6、然后就是执行 context.RemapHandler(httpHandler); 将请求正式交给MvcHandler。 7、在MvcHandler的ProcessRequest方法里面,首先从当前请求的路由表里面去控制器名称,如下图,得到”Home“:

8、然后就是创建控制器工厂、从工厂里面得到当前请求的控制器的对象,这部分和之前变化不大。 9、得到控制器对象之后,执行对应的当前请求的action方法,请求尽到Controller这个父类的Execute()方法里面

10、通过反射,最终执行BootstrapTest()方法。

11、BootstrapTest()方法执行完成之后,释放当前的控制器对象: factory.ReleaseController(controller); 。请求结束。 五、支持方法的重载

 博主对Swift.MVC框架进行了简单的扩展,使得框架支持action方法的重载。比如我们在HomeController里面定义了如下方法

public class HomeController : Controller { public void Index() { HttpContext.Current.Response.Write(); } public void Index(string id) { HttpContext.Current.Response.Write(+ id); } public void Index(string aa, string bb) { HttpContext.Current.Response.Write(); } public void BootstrapTest() { ..... } public void BootstrapTest(int id) { ..... } }

1、请求默认路由地址::16792/

2、请求地址::16792/Home/index?id=1

3、请求地址::16792/Home/index?aa=kate&bb=lucy

当然上文封装都是只是通过url传递参数的情况,等有时间可以扩展下,使得支持通过post请求传递参数。

六、总结

通过上一篇和这一篇,我们基本上把MVC的核心原理涉及到的技术都重写了一遍,等有时间再扩展一个自己的”View“,加上模型验证,数据绑定,我们的Swift.MVC就算是一个相对完整的微型MVC框架了。当然,此框架仅仅是从学习理解MVC的原理层面去实现的,如果要应用于项目,还要考虑很多东西,不论如何,是个好的开始,有时间继续完善。源码地址。

如果你觉得本文能够帮助你,可以右边随意 打赏 博主,也可以 推荐 进行精神鼓励。你的支持是博主继续坚持的不懈动力。

本文原创出处:

欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码) - 懒得安分

    MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码) - 懒得安

    2016-10-31 15:00

  • javascript运动系列第九篇——碰撞运动 - 小火柴的蓝色理想

    javascript运动系列第九篇——碰撞运动 - 小火柴的蓝色理想

    2016-10-29 18:00

  • 深究angularJS系列 - 第二弹 - 雨夜羽翼

    深究angularJS系列 - 第二弹 - 雨夜羽翼

    2016-10-29 10:00

  • HTML5学习 - 小熊吉米

    HTML5学习 - 小熊吉米

    2016-10-28 18:01

网友点评
p