国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ASP.NET MVC控制器的應(yīng)用研究

2016-06-16 19:22劉文元
電腦知識(shí)與技術(shù) 2016年10期
關(guān)鍵詞:控制器

劉文元

摘要:控制器是ASP.NET MVC的核心模塊,它是視圖和模型之間的調(diào)節(jié)器,體現(xiàn)了應(yīng)用程序的業(yè)務(wù)邏輯。該文通過介紹ASP.NET MVC控制器通過實(shí)現(xiàn)IController接口創(chuàng)建自定義的控制器和通過繼承Controller類來方便內(nèi)建控制器的方法,從請求接收輸入到響應(yīng)結(jié)果輸出分別進(jìn)行了闡述,以求展示ASP.NET MVC控制器的魅力。

關(guān)鍵詞:ASP.NET MVC;控制器

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)10-0018-02

1 ASP.NET發(fā)展概述

ASP.NET是微軟公司于2002年3月發(fā)布的新技術(shù),該技術(shù)只要用于替代ASP技術(shù)來進(jìn)行Web開發(fā)。當(dāng)時(shí)還是C/S架構(gòu)應(yīng)用程序的天下,所以ASP.NET為了使C/S架構(gòu)程序員可以快速上手進(jìn)行Web開發(fā)而產(chǎn)生了Web Form的設(shè)計(jì)思想。

隨著Web開發(fā)領(lǐng)域的發(fā)展,一些新的軟件開發(fā)的思想和Web前端技術(shù)的快速發(fā)展,尤其是AJAX技術(shù)的興起和發(fā)展,使得Web Form開發(fā)現(xiàn)代Web應(yīng)用程序顯得越來越力不從心,在很多B/S程序員在詬病利用Web Form開發(fā)程序多么不爽的時(shí)候,微軟公司于2009年發(fā)布了令人心動(dòng)的ASP.NET MVC框架。ASP.NET MVC框架的出現(xiàn)不是為了取代Web Form,而是給開發(fā)者提供了另外一個(gè)開發(fā)B/S架構(gòu)應(yīng)用程序的選擇。

2 ASP.NET MVC的優(yōu)點(diǎn)

MVC 是一種使用 MVC(Model View Controller 模型-視圖-控制器)設(shè)計(jì)創(chuàng)建 Web 應(yīng)用程序的模式。[1]MVC框架模式于1978年由Smalltalk項(xiàng)目組的Xerox PARC提出。ASP.NET MVC在實(shí)現(xiàn)了MVC框架模式的基礎(chǔ)上,還增強(qiáng)了關(guān)注分離。ASP.NET MVC可以完全實(shí)現(xiàn)WebForm所能實(shí)現(xiàn)的任何要求。轉(zhuǎn)換到ASP.NET MVC,對(duì)于ASP.NET開發(fā)人員來說是相當(dāng)自然的過程。

ASP.NET MVC的主要優(yōu)點(diǎn)有:良好的可測試性、強(qiáng)大的路由功能、利用最先進(jìn)的.NET框架進(jìn)行開發(fā)、建立在穩(wěn)定且經(jīng)過充分驗(yàn)證的ASP.NET平臺(tái)之上以及ASP.NET MVC已經(jīng)開源等。加上微軟這樣的頂級(jí)軟件公司的支持,使得我們完全可以對(duì)ASP.NET MVC的良好發(fā)展充滿期待。[2]

3 ASP.NET MVC控制器

ASP.NET MVC是模型-視圖-控制器模式,但是核心還是控制器??刂破髫?fù)責(zé)處理請求,將處理的數(shù)據(jù),再將數(shù)據(jù)響應(yīng)為視圖,最終生成HTML。控制器在用戶請求和服務(wù)器端操作起著中介的作用。控制器連接著用戶界面并安排頁面如何反饋給用戶,控制器只控制著頁面的反饋,而頁面的具體呈現(xiàn)不是控制器的工作,那是視圖應(yīng)該干的事情。控制器的主要作用是封裝Web應(yīng)用程序的業(yè)務(wù)邏輯。

ASP.NET MVC框架中,控制器類必須實(shí)現(xiàn)System.Web.Mvc.IController接口,這個(gè)接口只有一個(gè)Execute方法需要實(shí)現(xiàn)。ASP.NET MVC框架是可以自由定制的,可以通過實(shí)現(xiàn)IController接口來完成, 更推薦通過繼承微軟提供的System.Web.Mvc.Controller來內(nèi)建完成。Controller類提供了動(dòng)作方法、動(dòng)作結(jié)果和過濾器這三個(gè)特性,使得我們的開發(fā)更加高效,程序運(yùn)行更加穩(wěn)定和代碼編寫更加優(yōu)雅??刂破髦饕?fù)責(zé)接收請求和輸出結(jié)果。

3.1 接收請求

控制器常常需要通過查詢字符串、提交表單值和路由系統(tǒng)的URL解析參數(shù)來接受請求輸入。這些數(shù)據(jù)的訪問主要通過上下文對(duì)象(Context Objects)提取、動(dòng)作方法獲得參數(shù)和模型綁定(Model Binding)三種途徑來獲取。

3.1.1 上下文對(duì)象獲取數(shù)據(jù)

開發(fā)人員通過繼承Controller類來建立控制器時(shí)會(huì)得到一些Request、Response、HttpContext和Server屬性,這些屬性可以通過ControllerContext屬性進(jìn)行訪問。這些屬性包含了特定的請求信息。

3.1.2 動(dòng)作方法參數(shù)獲取數(shù)據(jù)

通過動(dòng)作方法的參數(shù)來接受輸入要比上下文獲取數(shù)據(jù)的方式更加直觀、方便、易于閱讀和便于單元測試。動(dòng)作方法參數(shù)不允許有out和ref參數(shù),否則會(huì)拋出異常。動(dòng)作方法參數(shù)賦值是通過上下文對(duì)象Request.QueryString、Request.Form和RouteData.Values來完成的。

Controller類使用了ASP.NET MVC內(nèi)建的 Value Provider和Model Binder來獲取動(dòng)作方法的參數(shù)值。Value Provider會(huì)抓取Request.QueryString、Request.Form和RouteData.Values的數(shù)據(jù)項(xiàng),然后將這些值傳遞給Model Binder,Model Binder會(huì)將這些數(shù)據(jù)映射成動(dòng)作方法參數(shù)的數(shù)據(jù)類型。

對(duì)于動(dòng)作方法的參數(shù),值類型參數(shù)則強(qiáng)制要求的,引用類型參數(shù)則是可選的。

如果動(dòng)作方法包含了一個(gè)無法轉(zhuǎn)換成正確類型的參數(shù)值,ASP.NET MVC會(huì)傳遞該參數(shù)類型的默認(rèn)值,并且在ModelState中將這個(gè)值注冊為一個(gè)驗(yàn)證錯(cuò)誤。在不檢查ModelState驗(yàn)證錯(cuò)誤的情況下,用戶如果在表單中輸入了不良數(shù)據(jù),那么該請求被處理后將會(huì)得到一個(gè)沒有輸入數(shù)據(jù)或者輸入默認(rèn)值的結(jié)果。

3.2 請求結(jié)果輸出

控制器在處理完請求后獲得一個(gè)響應(yīng)。可以通過IController接口來實(shí)現(xiàn)時(shí),需要負(fù)責(zé)處理請求的各個(gè)方面,甚至包括生成對(duì)客戶端的響應(yīng)。還可以通過繼承Controller,在Execute方法中返回HttpResponseBase類。

3.2.1 動(dòng)作結(jié)果

當(dāng)一個(gè)動(dòng)作方法返回一個(gè)動(dòng)作結(jié)果(Action Result)對(duì)象時(shí),ASP.NET MVC會(huì)調(diào)用這個(gè)對(duì)象的ExecuteResult方法,然后在動(dòng)作結(jié)果中處理Response對(duì)象,最終生成所要的輸出結(jié)果。ASP.NET MVC對(duì)動(dòng)作結(jié)果處理過程是:從動(dòng)作方法中返回一個(gè)動(dòng)作結(jié)果對(duì)象,當(dāng)ASP.NET MVC接收到這個(gè)動(dòng)作結(jié)果對(duì)象時(shí),會(huì)根據(jù)對(duì)象的類型來調(diào)用相應(yīng)的動(dòng)作結(jié)果類,這是會(huì)執(zhí)行動(dòng)作結(jié)果的ExecuteResult方法,ExecuteResult方法負(fù)責(zé)處理Response對(duì)象,用以生成所要的輸出結(jié)果。

ASP.NET MVC中內(nèi)建了很多的繼承于ActionResult類 的動(dòng)作結(jié)果類型。動(dòng)作方法中最常見的響應(yīng)形式是HTML,這可以通過ViewResult類的實(shí)例來完成。還有一種響應(yīng)形式是不直接產(chǎn)生輸出而是重定向到另外一個(gè)URL,可以通過RedirectResult類的實(shí)例來完成。動(dòng)作方法響應(yīng)為重定向有如下方式:

重定向到字面URL??梢酝ㄟ^Redirect方法重定向到HTTP代碼302(臨時(shí)重定向),也可以通過RedirectPermanent方法重定向到HTTP代碼301(永久重定向)。

重定向到路由系統(tǒng)的URL。可以通過RedirectToRoute方法來實(shí)現(xiàn),它的優(yōu)點(diǎn)是當(dāng)對(duì)路由系統(tǒng)進(jìn)行修改時(shí),響應(yīng)的URL也會(huì)進(jìn)行更新。

重定向到動(dòng)作方法??梢酝ㄟ^RedirectToAction和RedirectToActionPermanent方法來實(shí)現(xiàn), RedirectToAction重定向到HTTP代碼302(臨時(shí)重定向),RedirectToActionPermanent重定向到HTTP代碼301(永久重定向)。

重定向傳遞數(shù)據(jù)。因?yàn)橹囟ㄏ蛞馕吨强缬蛘埱?,所以ViewBag不能完成跨域請求,所以在重定向傳遞數(shù)據(jù)需要使用TempData來完成。其用法類似于Session的用法,只是TempData在被讀取之后,標(biāo)記為刪除,請求處理完成后刪除。

最后一種響應(yīng)形式為HTTP代碼,可以通過HttpStatusCodeResult方法來返回HTTP結(jié)果碼,可以通過HttpNotFound方法來返回HTTP代碼404(訪問的頁面不存在),還可以通過HttpUnauthorizedResult方法返回HTTP代碼401(未授權(quán)的請求)。

4 小結(jié)

控制器是ASP.NET MVC的核心模塊,它是視圖和模型之間的調(diào)節(jié)器,體現(xiàn)了應(yīng)用程序的業(yè)務(wù)邏輯。本文通過介紹ASP.NET MVC控制器通過實(shí)現(xiàn)IController接口創(chuàng)建自定義的控制器和通過繼承Controller類來方便內(nèi)建控制器的方法,從請求接收輸入到響應(yīng)結(jié)果輸出分別進(jìn)行了闡述,以求展示ASP.NET MVC控制器的魅力。

參考文獻(xiàn):

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

[2] Dino Esposito. ASP.NET MVC 5編程實(shí)戰(zhàn)[M]. 3版. 潘麗臣, 譯.北京:清華大學(xué)出版社,2015.

猜你喜歡
控制器
MOXA RTU控制器ioPAC 5542系列
倍福 CX8091嵌入式控制器
4V三輸出同步降壓型控制器
404 Not Found

404 Not Found


nginx
泗水县| 集贤县| 剑川县| 北辰区| 和龙市| 仙游县| 曲松县| 罗源县| 达拉特旗| 炉霍县| 霍州市| 祁东县| 玛纳斯县| 烟台市| 堆龙德庆县| 法库县| 富阳市| 凤阳县| 大冶市| 枣阳市| 繁昌县| 陈巴尔虎旗| 贵溪市| 安仁县| 忻城县| 玉环县| 丹凤县| 孟州市| 探索| 黔江区| 铁力市| 云龙县| 卢湾区| 太白县| 普兰店市| 万宁市| 黔西县| 南涧| 曲周县| 孙吴县| 正镶白旗|