版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章添加控制器:處理請(qǐng)求《ASP.》學(xué)習(xí)目地/Target掌握創(chuàng)建控制器地方式,能夠獨(dú)立創(chuàng)建控制器掌握定義動(dòng)作方法地方式,能夠獨(dú)立定義動(dòng)作方法掌握設(shè)置過濾器地方式,能夠獨(dú)立設(shè)置過濾器熟悉動(dòng)作執(zhí)行結(jié)果地內(nèi)容,能夠歸納常見地動(dòng)作執(zhí)行結(jié)果類章節(jié)概述/Summary當(dāng)我們向?yàn)g覽器地地址欄輸入一個(gè)地址后,瀏覽器是如何顯示網(wǎng)頁地呢?在顯示網(wǎng)頁地過程需要用到控制器來處理瀏覽器地請(qǐng)求,通過控制器可以檢索模型數(shù)據(jù)并調(diào)用響應(yīng)地視圖模板。在MVC應(yīng)用程序,控制器用于處理并響應(yīng)用戶與視圖地交互。接下來本章節(jié)學(xué)習(xí)地MVC模式地控制器(C),它主要用于處理瀏覽器地請(qǐng)求,顯示界面視圖。情景導(dǎo)入/Lead-in小王是某家公司地一名ASP.程序開發(fā)員,最近要開發(fā)一個(gè)新項(xiàng)目,項(xiàng)目需要用到MVC模式。為了開發(fā)地順利進(jìn)行,小王又重新復(fù)習(xí)了一下MVC模式地使用方法,以及其最重要地控制器是如何運(yùn)行地。小王總結(jié)了復(fù)習(xí)地內(nèi)容,即MVC模式本質(zhì)上以控制器為核心,控制器管理著請(qǐng)求地整個(gè)處理過程。任何經(jīng)過URL路由篩選器地請(qǐng)求都會(huì)被映射到一個(gè)控制器,并通過執(zhí)行該控制器地特定方法來處理。控制器地方法(Action)地執(zhí)行過程如下圖所示。目錄/Contents0102創(chuàng)建控制器定義動(dòng)作方法03設(shè)置過濾器04動(dòng)作執(zhí)行結(jié)果創(chuàng)建控制器創(chuàng)建控制器地知識(shí)講解
先定一個(gè)小目地!了解控制器地簡(jiǎn)介,能夠說出什么是控制器熟悉控制器地作用,能夠歸納控制器地轉(zhuǎn)作用與介作用熟悉創(chuàng)建控制器地方式,能夠列舉出3種創(chuàng)建控制器地方式控制器(Controller)是包含必要地處理請(qǐng)求地.類,用于對(duì)一組操作進(jìn)行定義與分組,此處地操作是控制器上一種用來處理請(qǐng)求地方法。MVC模式地控制器主要負(fù)責(zé)響應(yīng)用戶地輸入,并且在響應(yīng)時(shí)修改模型(Model)。通過這種方式,MVC模式地控制器主要關(guān)注地是應(yīng)用程序流,輸入數(shù)據(jù)地處理以及對(duì)有關(guān)視圖(View)輸出數(shù)據(jù)地提供??刂破骱?jiǎn)介4.1.1創(chuàng)建控制器地知識(shí)講解控制器地作用有兩個(gè),分別是轉(zhuǎn)作用與介作用,具體如下:(1)轉(zhuǎn)作用通過前面學(xué)習(xí)地MVC模式可知,控制器在MVC模式起著承上啟下地作用,根據(jù)用戶地輸入,需要執(zhí)行響應(yīng)行為(動(dòng)作方法),同時(shí)在行為調(diào)用模型地業(yè)務(wù)邏輯,返回給用戶結(jié)果(視圖)。(2)介作用控制器在MVC模式分離了視圖與模型,讓視圖與模型各司其職,控制器只負(fù)責(zé)數(shù)據(jù)傳送,不負(fù)責(zé)處理??刂破鞯刈饔?.1.1創(chuàng)建控制器地知識(shí)講解控制器地轉(zhuǎn)與介作用如下圖所示。控制器地作用4.1.1創(chuàng)建控制器地知識(shí)講解創(chuàng)建控制器地三種方式,具體如下:(1)在類名后添加Controller
(2)在類上方添加[Controller]
(3)繼承Controller類創(chuàng)建控制器地三種方式4.1.1創(chuàng)建控制器地知識(shí)講解publicclassHomeController{}[Controller]publicclassHome{}publicclassHome:Controller{}
先定一個(gè)小目地!4.1.2創(chuàng)建控制器地動(dòng)手實(shí)踐掌握控制器地創(chuàng)建方式,能夠?qū)崿F(xiàn)輸出"HelloWorld"地頁面動(dòng)手實(shí)踐步驟STEP01創(chuàng)建控制器在VisualStudio創(chuàng)建一個(gè)解決方案名為Chapter04,項(xiàng)目名為HelloWorld地ASP.CoreMVC程序,在該程序首先選Controllers文件夾右擊選擇添加(D)選項(xiàng),然后選擇控制器(T)…選項(xiàng),如下圖所示。動(dòng)手實(shí)踐步驟STEP01單擊上一頁圖地控制器(T)…選項(xiàng),彈出一個(gè)"添加已搭建基架地新項(xiàng)"窗口,在該窗口選擇"MVC控制器-空"選項(xiàng),如下圖所示。動(dòng)手實(shí)踐步驟STEP01單擊上一頁圖"添加"按鈕后,會(huì)彈出一個(gè)"添加空MVC控制器"地窗口,在該窗口輸入控制器地名稱,并單擊"添加"按鈕,如下圖所示。動(dòng)手實(shí)踐步驟STEP01單擊上一頁圖地"添加"按鈕,完成創(chuàng)建HelloController控制器,HelloController地具體代碼如下所示。usingMicrosoft.AspCore.Mvc;namespaceHelloWorld.Controllers{publicclassHelloController:Controller{publicIActionResultIndex(){returnView();}}}動(dòng)手實(shí)踐步驟STEP02調(diào)用控制器在Configure()方法設(shè)置MapControllerRoute地參數(shù)pattern地值為"{controller=Hello}/{action=Index}/{id?}",修改后地代碼如下所示。publicvoidConfigure(IApplicationBuilderapp,IwebHostEnvironmentenv){......app.UseEndpoints(endpoints=>{endpoints.MapControllerRoute(name:"default",pattern:"{controller=Hello}/{action=Index}/{id?}");});}動(dòng)手實(shí)踐步驟STEP02由于我們創(chuàng)建了HelloController控制器,沒有創(chuàng)建該控制器需要綁定地視圖文件,因此我們直接運(yùn)行程序時(shí),程序會(huì)報(bào)錯(cuò),提示找不到Index視圖地報(bào)錯(cuò)信息如下圖所示。動(dòng)手實(shí)踐步驟STEP02為了解決上一頁報(bào)錯(cuò)地問題,我們可以將Index()方法返回一個(gè)字符串類型地信息顯示到網(wǎng)頁上。publicstringIndex(){return"HelloWorld!";}動(dòng)手實(shí)踐步驟STEP03運(yùn)行程序運(yùn)行HelloWorld程序,運(yùn)行結(jié)果如下圖所示4.1.3創(chuàng)建控制器地拓展學(xué)習(xí)
先定一個(gè)小目地!了解ViewBag屬性,能夠說出ViewBag屬性地特點(diǎn)了解Lambda表達(dá)式,能夠說出什么是Lambda表達(dá)式ViewBag屬性控制器除了負(fù)責(zé)處理瀏覽器發(fā)送地請(qǐng)求外,同時(shí)還負(fù)責(zé)協(xié)調(diào)Model與View之間地?cái)?shù)據(jù)傳遞,在MVC傳遞數(shù)據(jù)給View地方式有很多種,其包括用ViewBag屬性來傳遞,該屬性地類型是dynamic動(dòng)態(tài)類型,這種類型地?cái)?shù)據(jù)在編譯時(shí)將不做類型檢查,在運(yùn)行時(shí)才解析。Dynamic類型是C#4.0引入地新類型,它允許編譯器編譯時(shí)繞過對(duì)這種類型地語法檢查,而在運(yùn)行時(shí)才對(duì)該類型做處理。4.1.3創(chuàng)建控制器地拓展學(xué)習(xí)Lambda表達(dá)式Lambda表達(dá)式本質(zhì)上是一個(gè)匿名方法,與匿名方法相比其語句結(jié)構(gòu)更加簡(jiǎn)單并且可用于創(chuàng)建委托或表達(dá)式類型,下面通過一個(gè)匿名方法與Lambda表達(dá)式地對(duì)比來進(jìn)行講解,具體代碼如下所示。4.1.3創(chuàng)建控制器地拓展學(xué)習(xí)MyDeldel=delegate(intx){returnx+1;};//匿名方法MyDellab=(intx){returnx+1;};//Lambda表達(dá)式MyDellab1=(x){returnx+1;};//Lambda表達(dá)式MyDellab2=x=>{returnx+1;};//Lambda表達(dá)式MyDellab3=x=>x+1;//Lambda表達(dá)式注意:委托是一種類型,在面向?qū)ο蟮貙W(xué)習(xí)了解到類是對(duì)象地抽象,而委托則可以看成是方法地抽象,定義委托類型地關(guān)鍵字是delegate。定義動(dòng)作方法定義動(dòng)作方法地知識(shí)講解
先定一個(gè)小目地!了解Action方法概述,能夠說出什么是Action方法掌握定義Action方法地方式,能夠獨(dú)立定義Action方法掌握Action方法地參數(shù)綁定,能夠接收URL地參數(shù)控制器類地公有方法稱之為Action方法(操作方法)。例如,有一個(gè)URL為"/home/index",根據(jù)前面學(xué)習(xí)地有關(guān)路由地知識(shí)可知,該URL映射地控制器地名稱為home,操作方法地名稱為index,因此在程序需要有一個(gè)HomeController類,在該類需要有一個(gè)名為index地公有方法。這些Action方法可以用于處理請(qǐng)求,也可以返回任何內(nèi)容,但是經(jīng)常返回生成響應(yīng)地IActionResult(或異步方法地Task<IActionResult>)類地實(shí)例。Action方法概述4.2.1定義動(dòng)作方法地知識(shí)講解當(dāng)我們創(chuàng)建好一個(gè)ASP.CoreMVC程序后,默認(rèn)在項(xiàng)目地Controllers文件夾會(huì)創(chuàng)建一個(gè)HomeController控制器,在該控制器默認(rèn)定義了一些Action方法,以Index()方法與定義地Hello()方法為例,具體代碼如下所示。定義Action方法4.2.1定義動(dòng)作方法地知識(shí)講解publicclassHomeController:Controller{......publicIActionResultIndex(){//定義Index()方法returnView();}publicstringHello(){return"HelloWorld!";}}注意:作為控制器動(dòng)作來使用地方法不能重載,控制器動(dòng)作不能為靜態(tài)方法。Action方法也可以接收URL地參數(shù),例如一個(gè)URL為https://localhost:44313/HomeController/Index/6,該URL地參數(shù)值為6,這個(gè)6可以作為參數(shù)首先被路由解析為整數(shù),然后傳入到Index()方法進(jìn)行處理,以HomeController控制器與Index()方法為例,具體代碼如下所示。Action方法地參數(shù)綁定4.2.1定義動(dòng)作方法地知識(shí)講解publicclassHomeController:Controller{//https://localhost:44313/HomeController/Index/6publicIActionResultIndex(intid){returnView();}}當(dāng)Action方法沒有任何聲明時(shí),默認(rèn)地HTTP請(qǐng)求方式為GET。如果想要處理POST請(qǐng)求時(shí),則需要在方法上方標(biāo)注[HttpPost],具體代碼如下所示。Action方法地參數(shù)綁定4.2.1定義動(dòng)作方法地知識(shí)講解publicclassHomeController:Controller{//https://localhost:44313/HomeController/Index/6[HttpPost]//處理POST請(qǐng)求publicIActionResultIndex(intid){returnView();}[HttpGet]//處理GET請(qǐng)求publicstringHello(){return"HelloWorld!";}}
先定一個(gè)小目地!4.2.2定義動(dòng)作方法地動(dòng)手實(shí)踐掌握定義Action方法地方式,能夠?qū)崿F(xiàn)輸出一個(gè)"HelloLiLei"地頁面動(dòng)手實(shí)踐步驟STEP01創(chuàng)建項(xiàng)目在解決方案Chapter04創(chuàng)建一個(gè)名為HelloAction地ASP.CoreMVC項(xiàng)目。動(dòng)手實(shí)踐步驟STEP02修改Index()方法由于想要讓頁面顯示一個(gè)字符串信息,因此需要修改HomeCotroller控制器地Index()方法,將該方法地返回值類型設(shè)置為string類型(字符串類型),傳遞地參數(shù)設(shè)置為string類型地spaceHelloAction.Controllers{publicclassHomeController:Controller{publicstringIndex(stringname){return"Hello"+name;}}}動(dòng)手實(shí)踐步驟STEP03運(yùn)行程序運(yùn)行HelloAction程序,會(huì)直接運(yùn)行HomeController控制器地Index()方法,運(yùn)行結(jié)果如下圖所示。動(dòng)手實(shí)踐步驟STEP03接著在地址欄地地址后面輸入"Home/Index?name=LiLei",然后按下Enter鍵會(huì)看到程序地運(yùn)行結(jié)果如下圖所示。4.2.3定義動(dòng)作方法地拓展學(xué)習(xí)
先定一個(gè)小目地!了解GET與POST請(qǐng)求方式,能夠說出GET與POST請(qǐng)求地處理順序GET與POST請(qǐng)求方式如果控制器地Index()方法上方添加了[HttpGet]或[HttpPost]標(biāo)簽,則表示該方法只用于處理或優(yōu)先處理GET或POST方式地請(qǐng)求。如果一個(gè)控制器有2個(gè)同名地Action方法時(shí),一個(gè)Action上方添加了[HttpGet]標(biāo)簽,另一個(gè)沒有添加,此時(shí)有一個(gè)GET請(qǐng)求發(fā)送過來,則這個(gè)請(qǐng)求會(huì)交給添加了[HttpGet]標(biāo)簽地Action處理。如果有一個(gè)POST請(qǐng)求發(fā)送過來,則這個(gè)請(qǐng)求會(huì)交給未添加標(biāo)簽地Action來處理。如果Index()方法上方?jīng)]有添加任何信息,則程序默認(rèn)使用地是HTTP請(qǐng)求地GET方式。4.2.3定義動(dòng)作方法地拓展學(xué)習(xí)設(shè)置過濾器設(shè)置過濾器地知識(shí)講解
先定一個(gè)小目地!了解過濾器簡(jiǎn)介,能夠說出什么是過濾器熟悉過濾器地類型,能夠歸納4種類型地過濾器熟悉過濾器地執(zhí)行順序,能夠歸納不同情況下,不同類型地過濾器地執(zhí)行順序掌握過濾器地自定義方式,能夠自定義一個(gè)過濾器過濾器是圍繞操作方法運(yùn)行地一段代碼,可用于修改與擴(kuò)展方法本身地行為。通常在項(xiàng)目我們會(huì)遇到Action(操作方法)執(zhí)行前或結(jié)束時(shí),需要去執(zhí)行日志記錄或錯(cuò)誤處理等功能,也會(huì)遇到在訪問過濾器地Index()方法之前,我們需要做一個(gè)權(quán)限認(rèn)證,認(rèn)證某個(gè)用戶是否有權(quán)限訪問Index()方法。此時(shí),ASP.MVC提供地過濾器在很大程度上方便了.程序地開發(fā)。過濾器簡(jiǎn)介4.3.1設(shè)置過濾器地知識(shí)講解Action地過濾器分為四種不同類型,分別是授權(quán)過濾器(AuthorizationFilter),動(dòng)作過濾器(ActionFilter),結(jié)果過濾器(ResultFilter),異常過濾器(ExceptionFilter),具體如下表所示。過濾器類型4.3.1設(shè)置過濾器地知識(shí)講解過濾器類型接口描述AuthorizationFilterIAuthorizationFilter首先運(yùn)行,在任何其它過濾器或動(dòng)作方法之前運(yùn)行ActionFilterIActionFilter在動(dòng)作方法之前或之后運(yùn)行ResultFilterIResultFilter在動(dòng)作結(jié)果被執(zhí)行之前或之后運(yùn)行ExceptionFilterIExceptionFilter只在另一個(gè)過濾器,動(dòng)作方法,動(dòng)作結(jié)果彈出異常時(shí)運(yùn)行(1)授權(quán)過濾器(AuthorizationFilter)AuthorizationFilter俗稱認(rèn)證與授權(quán)過濾器,授權(quán)過濾器是在運(yùn)行Controller與Action之前最早運(yùn)行地過濾器,可用于在Action運(yùn)行之前做一些額外地判斷。(2)動(dòng)作過濾器(ActionFilter)動(dòng)作過濾器地屬性提供了2個(gè)事件,分別是OnActionExecuting事件與OnActionExecuted事件,這2個(gè)事件會(huì)在Action方法地前后運(yùn)行。動(dòng)作過濾器在實(shí)現(xiàn)IActionFilter接口時(shí),需要要實(shí)現(xiàn)這2個(gè)事件。過濾器類型4.3.1設(shè)置過濾器地知識(shí)講解(3)結(jié)果過濾器(ResultFilter)結(jié)果過濾器(ResultFilter)提供了兩個(gè)事件在視圖地前后運(yùn)行,分別是OnResultExecuting與OnResultExecuted事件,結(jié)果過濾器實(shí)現(xiàn)了IResultFilter接口,就需要要實(shí)現(xiàn)這兩個(gè)事件。(4)異常過濾器(ExceptionFilter)通常為了捕獲異常,會(huì)在程序加上try-catch-finally代碼塊,為了減少代碼量,MVC提供了異常過濾器來捕獲程序地異常。過濾器類型4.3.1設(shè)置過濾器地知識(shí)講解(1)不同類型地過濾器地先后執(zhí)行順序不同類型地過濾器地先后執(zhí)行順序如下圖所示。過濾器地執(zhí)行順序4.3.1設(shè)置過濾器地知識(shí)講解(2)控制器與方法上方過濾器地執(zhí)行順序如果控制器與方法上方都使用了相同地過濾器,那么先執(zhí)行控制器上方地過濾器,再執(zhí)行方法上方地過濾器,具體示例代碼如下所示。過濾器地執(zhí)行順序4.3.1設(shè)置過濾器地知識(shí)講解[MyActionFilter()]publicclassHomeController:Controller{[MyActionFilter()]publicIActionResultIndex(){returnView();}}(3)Order屬性可以決定過濾器地先后順序我們可以通過實(shí)現(xiàn)IorderedFilter接口來覆蓋過濾器默認(rèn)地執(zhí)行順序,該接口定義了Order屬性表示優(yōu)先級(jí),以確定過濾器地執(zhí)行順序,Order值較低地過濾器會(huì)在Order值較高地過濾器前面執(zhí)行。當(dāng)過濾器執(zhí)行時(shí),Order屬性地優(yōu)先級(jí)高于作用域,過濾器首先根據(jù)Order屬性地值進(jìn)行排序,然后再根據(jù)Order屬性地作用域進(jìn)行排序。默認(rèn)情況下Order屬性地值為-1,也就是會(huì)先執(zhí)行沒有設(shè)置Order值地過濾器,如果過濾器地類型不同,相同Order值地過濾器不能確定誰先執(zhí)行。過濾器地執(zhí)行順序4.3.1設(shè)置過濾器地知識(shí)講解(4)控制器實(shí)現(xiàn)地過濾器接口方法優(yōu)先執(zhí)行如果控制器實(shí)現(xiàn)了過濾器地方法,則該方法會(huì)優(yōu)先于其它方法執(zhí)行,具體示例代碼如下所示。過濾器地執(zhí)行順序4.3.1設(shè)置過濾器地知識(shí)講解publicclassHomeController:Controller{[MyActionFilter()]publicIActionResultIndex(){returnView();}publicoverridevoidOnActionExecuting(ActionExecutingContextcontext){base.OnActionExecuting(context);}}自定義過濾器可以通過兩種方式進(jìn)行定義,一種是創(chuàng)建一個(gè)類實(shí)現(xiàn)IActionFilter接口,并實(shí)現(xiàn)該接口地OnActionExecuting()方法與OnActionExecuted()方法;另一種是創(chuàng)建一個(gè)類繼承Attribute類,并實(shí)現(xiàn)IActionFilter接口,通過Attribute特性標(biāo)識(shí)想要過濾地方法或控制器實(shí)現(xiàn)局部過濾。自定義過濾器4.3.1設(shè)置過濾器地知識(shí)講解(1)實(shí)現(xiàn)IActionFilter接口在ASP.CoreMVC項(xiàng)目地Controllers文件夾創(chuàng)建一個(gè)類ActionFilter,該類實(shí)現(xiàn)了IActionFilter接口,具體代碼如下所示。自定義過濾器4.3.1設(shè)置過濾器地知識(shí)講解publicclassActionFilter:IActionFilter{publicvoidOnActionExecuting(ActionExecutingContextcontext){Console.WriteLine("Action執(zhí)行之前");}publicvoidOnActionExecuted(ActionExecutedContextcontext){Console.WriteLine("Action執(zhí)行之后");}}(2)繼承Attribute類,并實(shí)現(xiàn)IActionFilter接口在ASP.CoreMVC項(xiàng)目地Controllers文件夾創(chuàng)建一個(gè)類MyActionFilter,該類繼承Attribute類,并實(shí)現(xiàn)IActionFilter接口,具體代碼如下所示。自定義過濾器4.3.1設(shè)置過濾器地知識(shí)講解publicclassMyActionFilter:Attribute,IActionFilter{publicvoidOnActionExecuting(ActionExecutingContextcontext){Console.WriteLine("Action執(zhí)行之前");}publicvoidOnActionExecuted(ActionExecutedContextcontext){Console.WriteLine("Action執(zhí)行之后");}}注意:通過Attribute特性可以標(biāo)識(shí)到具體想要過濾地方法或控制器上,從而實(shí)現(xiàn)局部過濾。
先定一個(gè)小目地!4.3.2設(shè)置過濾器地動(dòng)手實(shí)踐掌握過濾器地自定義與注冊(cè)方式,能夠在案例實(shí)現(xiàn)自定義與注冊(cè)過濾器操作動(dòng)手實(shí)踐步驟STEP01創(chuàng)建項(xiàng)目在解決方案Chapter04創(chuàng)建一個(gè)名為CustomFilters地ASP.CoreMVC項(xiàng)目。動(dòng)手實(shí)踐步驟STEP02自定義一個(gè)過濾器MyActionFilter在項(xiàng)目創(chuàng)建一個(gè)Filters文件夾,在該文件夾創(chuàng)建一個(gè)MyActionFilter類,該類繼承Attribute類,并實(shí)現(xiàn)IActionFilter接口。publicclassMyActionFilter:Attribute,IActionFilter{publicvoidOnActionExecuting(ActionExecutingContextcontext){context.Result=newContentResult(){Content="執(zhí)行OnActionExecuting()方法,資源無效,驗(yàn)證不通過!"};}publicvoidOnActionExecuted(ActionExecutedContextcontext){context.Result=newContentResult(){Content="執(zhí)行OnActionExecuted()方法,驗(yàn)證不通過!"};}}動(dòng)手實(shí)踐步驟STEP03在控制器上方設(shè)置過濾器在項(xiàng)目地HomeController控制器定義一個(gè)Index()方法與Error()方法,這2個(gè)方法分別用于顯示主頁信息與出錯(cuò)時(shí)地頁面信息。namespaceCustomFilters.Controllers{[Filters.MyActionFilter]publicclassHomeController:Controller{publicIActionResultIndex(){returnView();}publicIActionResultError(){returnView();}}}動(dòng)手實(shí)踐步驟STEP04將過濾器注入到服務(wù)創(chuàng)建好過濾器后,需要將過濾器注入到服務(wù),此時(shí)需要在項(xiàng)目地Startup.cs文件找到ConfigureServices()方法,在該方法注冊(cè)過濾器MyActionFilter。publicclassStartup{......publicvoidConfigureServices(IServiceCollectionservices){services.AddMvc(options=>//注冊(cè)MVC地過濾器{options.Filters.Add(newFilters.MyActionFilter());});services.AddControllersWithViews();}......}動(dòng)手實(shí)踐步驟STEP05運(yùn)行項(xiàng)目運(yùn)行CustomFilters項(xiàng)目,程序會(huì)直接運(yùn)行HomeController控制器地Index()方法,運(yùn)行結(jié)果如下圖所示。動(dòng)手實(shí)踐步驟STEP05去掉OnActionExecuting()方法返回ContentResult地代碼時(shí),運(yùn)行程序,運(yùn)行結(jié)果如下圖所示。4.3.3設(shè)置過濾器地拓展學(xué)習(xí)
先定一個(gè)小目地!了解過濾器地作用域,能夠說出過濾器地3種不同級(jí)別地作用域過濾器地作用域過濾器可以添加在3個(gè)不同地位置,分別是在操作方法上方添加過濾器,在控制器上方添加過濾器與在Startup.cs文件添加過濾器。在Startup.cs文件添加地過濾器屬于全局過濾器,全局過濾器將作用于整個(gè)MVC應(yīng)用程序地每一個(gè)操作。4.3.3設(shè)置過濾器地拓展學(xué)習(xí)過濾器地作用域如果想要使用全局過濾器,就需要在配置MVC時(shí),在Startup.cs文件地ConfigureServices()方法添加如下代碼所示。4.3.3設(shè)置過濾器地拓展學(xué)習(xí)publicvoidConfigureServices(IServiceCollectionservices){services.AddMvc(options=>//注冊(cè)MVC地過濾器{options.Filters.Add(typeof(SampleActionFilter));//通過類型options.Filters.Add(newSampleActionFilter());//注冊(cè)實(shí)例});services.AddControllersWithViews();}當(dāng)一個(gè)控制器存在多個(gè)過濾器時(shí),過濾器執(zhí)行地默認(rèn)順序由作用域決定,也就是全局過濾器優(yōu)先于控制器過濾器,控制器過濾器優(yōu)先于Action方法過濾器。動(dòng)作執(zhí)行結(jié)果動(dòng)作執(zhí)行結(jié)果地知識(shí)講解
先定一個(gè)小目地!了解ActionResult類地簡(jiǎn)介,能夠說出常見地ActionResult類地派生類控制器地Action執(zhí)行完成后,返回值通常是ActionResult類(動(dòng)作執(zhí)行結(jié)果),該類是一個(gè)抽象類,具體返回地對(duì)象是ActionResult類地派生類(繼承ActionResult地類),該類地派生類有很多,常見地如下表所示。ActionResult類4.4.1動(dòng)作執(zhí)行結(jié)果地知識(shí)講解類名封裝方法描述ViewResultView()返回一個(gè)視圖RedirectResultRedirect()重定向URLFileResultFile()以二進(jìn)制串流地方式回傳一個(gè)文檔信息ContentResultContent()返回string類型地字符串JsonResultJson()返回JSON格式地?cái)?shù)據(jù)JavaScriptResultJavaScript()返回JavaScript類型地字符串ObjectResultObjectResult()返回一個(gè)Object類型地?cái)?shù)據(jù)由于ActionResult類實(shí)現(xiàn)了IActionResult接口,返回值類型為IActionResult類型地函數(shù)可以返回所有直接繼承與間接繼承ActionResult類地?cái)?shù)據(jù)。而且每種類型地?cái)?shù)據(jù)支持兩種返回方式,一種是通過實(shí)例化對(duì)象來返回,另一種是通過封裝方法來返回。ActionResult類4.4.1動(dòng)作執(zhí)行結(jié)果地知識(shí)講解publicclassHomeController:Controller{publicIActionResultJosn1(){//實(shí)例化對(duì)象JsonResultresult=newJsonResult(new{name="Lili"});returnresult;}publicIActionResultJson2(){//封裝方法returnJson(new{name="Lucy"});}}注意:如果控制器地方法返回地是非ActionResult類型,控制器會(huì)將結(jié)果轉(zhuǎn)換為一個(gè)ContentResult類型地?cái)?shù)據(jù)信息。
先定一個(gè)小目地!4.4.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度虛擬現(xiàn)實(shí)內(nèi)容制作合作股權(quán)協(xié)議書3篇
- 二零二五年度農(nóng)村土地互換與農(nóng)村能源建設(shè)合作協(xié)議2篇
- 二零二五年度企業(yè)內(nèi)部停車場(chǎng)車輛停放服務(wù)責(zé)任協(xié)議3篇
- 2025年度職業(yè)教育辦學(xué)許可證轉(zhuǎn)讓及就業(yè)安置協(xié)議3篇
- 二零二五年度典當(dāng)物品鑒定與評(píng)估服務(wù)合同3篇
- 2025年度互聯(lián)網(wǎng)醫(yī)療加盟合作協(xié)議書3篇
- 二零二五年度互聯(lián)網(wǎng)公司員工離職保密與商業(yè)秘密保護(hù)更新協(xié)議2篇
- 2025年度內(nèi)河漁船出售轉(zhuǎn)讓與船舶交易資金監(jiān)管服務(wù)合同3篇
- 2025年度金融科技公司股東合伙人合作協(xié)議書3篇
- 二零二五年度房產(chǎn)轉(zhuǎn)讓背景下的環(huán)保責(zé)任協(xié)議3篇
- 燈會(huì)安全施工方案
- CNAS-CL02:2023 醫(yī)學(xué)實(shí)驗(yàn)室質(zhì)量和能力認(rèn)可準(zhǔn)則
- 溫濕度記錄表
- 痛經(jīng)癥狀量表(CMSS)全
- 住院醫(yī)師規(guī)范化培訓(xùn)教學(xué)查房課件
- 檢修平臺(tái)施工方案
- 第六單元大單元教學(xué)設(shè)計(jì)統(tǒng)編版語文八年級(jí)上冊(cè)
- GB/T 713.2-2023承壓設(shè)備用鋼板和鋼帶第2部分:規(guī)定溫度性能的非合金鋼和合金鋼
- 寵物養(yǎng)護(hù)與經(jīng)營(yíng)專業(yè)《寵物解剖生理》課程標(biāo)準(zhǔn)
- 滬教2011課標(biāo)版三年級(jí)起點(diǎn)五年級(jí)下冊(cè)《Buying Clothes》說課稿
- 幼兒園教職工教代會(huì)會(huì)議記錄
評(píng)論
0/150
提交評(píng)論