ASP.NET MVC控制器的应用研究

2016-06-16 19:22刘文元
电脑知识与技术 2016年10期
关键词:控制器

刘文元

摘要:控制器是ASP.NET MVC的核心模块,它是视图和模型之间的调节器,体现了应用程序的业务逻辑。该文通过介绍ASP.NET MVC控制器通过实现IController接口创建自定义的控制器和通过继承Controller类来方便内建控制器的方法,从请求接收输入到响应结果输出分别进行了阐述,以求展示ASP.NET MVC控制器的魅力。

关键词:ASP.NET MVC;控制器

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)10-0018-02

1 ASP.NET发展概述

ASP.NET是微软公司于2002年3月发布的新技术,该技术只要用于替代ASP技术来进行Web开发。当时还是C/S架构应用程序的天下,所以ASP.NET为了使C/S架构程序员可以快速上手进行Web开发而产生了Web Form的设计思想。

随着Web开发领域的发展,一些新的软件开发的思想和Web前端技术的快速发展,尤其是AJAX技术的兴起和发展,使得Web Form开发现代Web应用程序显得越来越力不从心,在很多B/S程序员在诟病利用Web Form开发程序多么不爽的时候,微软公司于2009年发布了令人心动的ASP.NET MVC框架。ASP.NET MVC框架的出现不是为了取代Web Form,而是给开发者提供了另外一个开发B/S架构应用程序的选择。

2 ASP.NET MVC的优点

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。[1]MVC框架模式于1978年由Smalltalk项目组的Xerox PARC提出。ASP.NET MVC在实现了MVC框架模式的基础上,还增强了关注分离。ASP.NET MVC可以完全实现WebForm所能实现的任何要求。转换到ASP.NET MVC,对于ASP.NET开发人员来说是相当自然的过程。

ASP.NET MVC的主要优点有:良好的可测试性、强大的路由功能、利用最先进的.NET框架进行开发、建立在稳定且经过充分验证的ASP.NET平台之上以及ASP.NET MVC已经开源等。加上微软这样的顶级软件公司的支持,使得我们完全可以对ASP.NET MVC的良好发展充满期待。[2]

3 ASP.NET MVC控制器

ASP.NET MVC是模型-视图-控制器模式,但是核心还是控制器。控制器负责处理请求,将处理的数据,再将数据响应为视图,最终生成HTML。控制器在用户请求和服务器端操作起着中介的作用。控制器连接着用户界面并安排页面如何反馈给用户,控制器只控制着页面的反馈,而页面的具体呈现不是控制器的工作,那是视图应该干的事情。控制器的主要作用是封装Web应用程序的业务逻辑。

ASP.NET MVC框架中,控制器类必须实现System.Web.Mvc.IController接口,这个接口只有一个Execute方法需要实现。ASP.NET MVC框架是可以自由定制的,可以通过实现IController接口来完成, 更推荐通过继承微软提供的System.Web.Mvc.Controller来内建完成。Controller类提供了动作方法、动作结果和过滤器这三个特性,使得我们的开发更加高效,程序运行更加稳定和代码编写更加优雅。控制器主要负责接收请求和输出结果。

3.1 接收请求

控制器常常需要通过查询字符串、提交表单值和路由系统的URL解析参数来接受请求输入。这些数据的访问主要通过上下文对象(Context Objects)提取、动作方法获得参数和模型绑定(Model Binding)三种途径来获取。

3.1.1 上下文对象获取数据

开发人员通过继承Controller类来建立控制器时会得到一些Request、Response、HttpContext和Server属性,这些属性可以通过ControllerContext属性进行访问。这些属性包含了特定的请求信息。

3.1.2 动作方法参数获取数据

通过动作方法的参数来接受输入要比上下文获取数据的方式更加直观、方便、易于阅读和便于单元测试。动作方法参数不允许有out和ref参数,否则会抛出异常。动作方法参数赋值是通过上下文对象Request.QueryString、Request.Form和RouteData.Values来完成的。

Controller类使用了ASP.NET MVC内建的 Value Provider和Model Binder来获取动作方法的参数值。Value Provider会抓取Request.QueryString、Request.Form和RouteData.Values的数据项,然后将这些值传递给Model Binder,Model Binder会将这些数据映射成动作方法参数的数据类型。

对于动作方法的参数,值类型参数则强制要求的,引用类型参数则是可选的。

如果动作方法包含了一个无法转换成正确类型的参数值,ASP.NET MVC会传递该参数类型的默认值,并且在ModelState中将这个值注册为一个验证错误。在不检查ModelState验证错误的情况下,用户如果在表单中输入了不良数据,那么该请求被处理后将会得到一个没有输入数据或者输入默认值的结果。

3.2 请求结果输出

控制器在处理完请求后获得一个响应。可以通过IController接口来实现时,需要负责处理请求的各个方面,甚至包括生成对客户端的响应。还可以通过继承Controller,在Execute方法中返回HttpResponseBase类。

3.2.1 动作结果

当一个动作方法返回一个动作结果(Action Result)对象时,ASP.NET MVC会调用这个对象的ExecuteResult方法,然后在动作结果中处理Response对象,最终生成所要的输出结果。ASP.NET MVC对动作结果处理过程是:从动作方法中返回一个动作结果对象,当ASP.NET MVC接收到这个动作结果对象时,会根据对象的类型来调用相应的动作结果类,这是会执行动作结果的ExecuteResult方法,ExecuteResult方法负责处理Response对象,用以生成所要的输出结果。

ASP.NET MVC中内建了很多的继承于ActionResult类 的动作结果类型。动作方法中最常见的响应形式是HTML,这可以通过ViewResult类的实例来完成。还有一种响应形式是不直接产生输出而是重定向到另外一个URL,可以通过RedirectResult类的实例来完成。动作方法响应为重定向有如下方式:

重定向到字面URL。可以通过Redirect方法重定向到HTTP代码302(临时重定向),也可以通过RedirectPermanent方法重定向到HTTP代码301(永久重定向)。

重定向到路由系统的URL。可以通过RedirectToRoute方法来实现,它的优点是当对路由系统进行修改时,响应的URL也会进行更新。

重定向到动作方法。可以通过RedirectToAction和RedirectToActionPermanent方法来实现, RedirectToAction重定向到HTTP代码302(临时重定向),RedirectToActionPermanent重定向到HTTP代码301(永久重定向)。

重定向传递数据。因为重定向意味着是跨域请求,所以ViewBag不能完成跨域请求,所以在重定向传递数据需要使用TempData来完成。其用法类似于Session的用法,只是TempData在被读取之后,标记为删除,请求处理完成后删除。

最后一种响应形式为HTTP代码,可以通过HttpStatusCodeResult方法来返回HTTP结果码,可以通过HttpNotFound方法来返回HTTP代码404(访问的页面不存在),还可以通过HttpUnauthorizedResult方法返回HTTP代码401(未授权的请求)。

4 小结

控制器是ASP.NET MVC的核心模块,它是视图和模型之间的调节器,体现了应用程序的业务逻辑。本文通过介绍ASP.NET MVC控制器通过实现IController接口创建自定义的控制器和通过继承Controller类来方便内建控制器的方法,从请求接收输入到响应结果输出分别进行了阐述,以求展示ASP.NET MVC控制器的魅力。

参考文献:

[1] 百度百科. ASP.NET MVC http://baike.baidu.com/link?url=z_9qd6kpXw4z4DwtqiQXv58w24JoOCQ63XNtVKhmfHZgMAAPqlRvvIIZiDHWDHrnYVKXc-2hCvYETb_eNovT_q

[2] Dino Esposito. ASP.NET MVC 5编程实战[M]. 3版. 潘丽臣, 译.北京:清华大学出版社,2015.

猜你喜欢
控制器
MOXA RTU控制器ioPAC 5542系列
倍福 CX8091嵌入式控制器
4V三输出同步降压型控制器