ASP.NET程序設(shè)計(jì)高職PPT完整全套教學(xué)課件_第1頁
ASP.NET程序設(shè)計(jì)高職PPT完整全套教學(xué)課件_第2頁
ASP.NET程序設(shè)計(jì)高職PPT完整全套教學(xué)課件_第3頁
ASP.NET程序設(shè)計(jì)高職PPT完整全套教學(xué)課件_第4頁
ASP.NET程序設(shè)計(jì)高職PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩212頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目一

初識(shí)ASP.NETCore任務(wù)1為何選擇ASP.NETCore任務(wù)2ASP.NETCore基本術(shù)語項(xiàng)目1初識(shí)ASP.NETCore.ppt項(xiàng)目2網(wǎng)頁基礎(chǔ)知識(shí).ppt項(xiàng)目3C#基礎(chǔ).ppt項(xiàng)目4ASPNETCore核心組件.ppt項(xiàng)目5ASPNETCoreMVC設(shè)計(jì)模式.ppt項(xiàng)目6EFCore數(shù)據(jù)訪問與倉儲(chǔ)模式.ppt項(xiàng)目7在頁面顯示數(shù)據(jù).ppt項(xiàng)目8標(biāo)簽助手TagHelpers.ppt項(xiàng)目9身份驗(yàn)證與授權(quán).ppt項(xiàng)目10發(fā)布與部署.ppt全套PPT課件任務(wù)1為何選擇ASP.NETCore任務(wù)引入小王是某職業(yè)學(xué)院計(jì)算機(jī)專業(yè)的學(xué)生,寒假在家休息時(shí),聽說下學(xué)期就要開設(shè)ASP.NET應(yīng)用程序開發(fā)相關(guān)的課程,他想利用假期先預(yù)習(xí)一下相關(guān)的知識(shí)。在網(wǎng)上輸入ASP.NET,出現(xiàn)了很多相似或相關(guān)的術(shù)語,例如ASP、ASP+、ASP.NET、ASP.NETCore、.NET、.NETFramework、.NETCore等等,軟件的版本號(hào)也讓人眼花繚亂。這些術(shù)語之間有什么區(qū)別?在當(dāng)前的開發(fā)環(huán)境下,該如何選擇合適的版本呢?帶著這些問題,小王開始了ASP.NET學(xué)習(xí)之旅。知識(shí)準(zhǔn)備一、ASP.NET的發(fā)展歷程ASP(ActiveServerPages,動(dòng)態(tài)服務(wù)器頁面)是微軟開發(fā)的第一種服務(wù)器端腳本技術(shù),如今常被稱為經(jīng)典ASP。ASP文件的后綴是.asp,運(yùn)行于服務(wù)器端。當(dāng)瀏覽器請(qǐng)求一個(gè).asp頁面時(shí),該請(qǐng)求通過網(wǎng)絡(luò)被發(fā)送到相應(yīng)的Web服務(wù)器,Web服務(wù)器響應(yīng)該請(qǐng)求,從硬盤或內(nèi)存中獲取相應(yīng)的ASP文件,并將ASP文件發(fā)送到腳本引擎(asp.dll)文件中。腳本引擎將ASP文件從頭到尾進(jìn)行解釋執(zhí)行,并根據(jù)ASP文件中的腳本命令生成相應(yīng)的標(biāo)準(zhǔn)格式的HTML頁面返回瀏覽器。盡管ASP伸縮性良好且功能強(qiáng)大,但是它太面向代碼,不算是應(yīng)用程序框架,也不是企業(yè)級(jí)的開發(fā)工具。因此,微軟徹底重寫了底層架構(gòu),開發(fā)了.NET平臺(tái)的基礎(chǔ)結(jié)構(gòu).NETFramework。ASP.NET屬于.NETFramework的一部分,是一種全新的服務(wù)器端腳本編程技術(shù),用于使用HTML、CSS和JavaScript構(gòu)建強(qiáng)大的網(wǎng)站和web應(yīng)用程序,還可以創(chuàng)建WebApI并使用Web套接字等實(shí)時(shí)技術(shù),提供開發(fā)人員生成企業(yè)級(jí)Web應(yīng)用程序所需的服務(wù)。它不是ASP的更新版本,而是下一版本的的ASP,且不向后兼容ASP。ASP.NET文件的后綴是".aspx",可以包含HTML、XML以及腳本。ASP.NET提供了三個(gè)用于創(chuàng)建web應(yīng)用程序的框架:WebForms、ASP.NETMVC和ASP.NET網(wǎng)頁,用于在Windows上生成基于服務(wù)器的企業(yè)級(jí)Web應(yīng)用所需的服務(wù)。WebForms:可以使用拖放事件驅(qū)動(dòng)模型構(gòu)建動(dòng)態(tài)網(wǎng)站。MVC:提供功能強(qiáng)大、基于模式的方法實(shí)現(xiàn)快速、TDD友好的開發(fā),以便創(chuàng)建使用最新Web標(biāo)準(zhǔn)的復(fù)雜應(yīng)用程序。ASP.NET網(wǎng)頁:提供一種將服務(wù)器代碼與HTML組合在一起,以創(chuàng)建動(dòng)態(tài)Web內(nèi)容的快速、易學(xué)的簡(jiǎn)便方法。二、.NETFramework主要組成部分.NETFramework是構(gòu)建、開發(fā)及運(yùn)行Web應(yīng)用程序和Web服務(wù)的一種平臺(tái),旨在提供一個(gè)一致的面向?qū)ο蟮木幊汰h(huán)境,一個(gè)將軟件部署和版本控制沖突最小化、消除腳本環(huán)境或解釋環(huán)境的性能問題、且保證代碼安全執(zhí)行的代碼執(zhí)行環(huán)境。.NETFramework包括3個(gè)主要的組成部分:(1)編程工具(2)公共語言運(yùn)行庫(CLR)(3)基類庫(BaseClassLibrary,BCL)三、ASP.NET和ASP.NETCore的區(qū)別盡管傳統(tǒng)的ASP.NET技術(shù)性能已經(jīng)很穩(wěn)定,且在市場(chǎng)中的占比很大,但它與Windows平臺(tái)深度綁定,極大地限制了.NET技術(shù)的應(yīng)用范圍。由此,微軟逐步對(duì).NET開放,將下一代ASP.NET定義為開源的、跨平臺(tái)的開發(fā)平臺(tái),不再依賴于.NETFramework。這個(gè)項(xiàng)目代號(hào)為“ASP.NETvNext”的產(chǎn)品一度被稱作ASP.NET5,直到2016年為了避免命名歧義,被正式更名為ASP.NETCore并發(fā)布1.0版。相較于ASP.NET,ASP.NETCore具有如下優(yōu)點(diǎn):跨平臺(tái),能夠在三大操作系統(tǒng)Windows、MAC和Linux上進(jìn)行開發(fā)和運(yùn)行開放源代碼(使用MITLicense),以社區(qū)為中心內(nèi)置依賴項(xiàng)注入,對(duì)架構(gòu)本身安裝沒有依賴有更多的安裝配置方法,可以根據(jù)需要隨心配置開發(fā)工具能夠處理更多的請(qǐng)求,處理請(qǐng)求的效率更高、性能更好ASP.NETCore與ASP.NET4.x的主要區(qū)別四、選擇.NETFramework還是.NETCore.NETFramework是微軟2002年發(fā)布的用于創(chuàng)建Windows應(yīng)用的開發(fā)平臺(tái),目前版本為4.8,并且仍由Microsoft支持。.NETFramework與.NETCore是.NET通用開發(fā)平臺(tái)的兩個(gè)獨(dú)立的產(chǎn)品。(1)在以下情況,對(duì)服務(wù)器應(yīng)用程序使用.NETCore:需要在多個(gè)平臺(tái)(例如Windows、Linux和macOS)上運(yùn)行以微服務(wù)為目標(biāo)使用Docker容器需要高性能和可擴(kuò)展的系統(tǒng)需按應(yīng)用程序級(jí)別提供并行的.NET版本(2)在以下情況,對(duì)服務(wù)器應(yīng)用程序使用.NETFramework:需要快速開發(fā)并部署一個(gè).NET應(yīng)用并且沒有充足的時(shí)間去學(xué)習(xí).NETCore維護(hù)使用.NETFramework的應(yīng)用應(yīng)用使用不可用于.NET的第三方庫或NuGet包應(yīng)用中的某些.NETFramework技術(shù)不支持.NET平臺(tái)五、版本選擇.NETCore和.NET5運(yùn)行時(shí)各版本的版本號(hào)以“主要版本.次要版本.補(bǔ)丁”格式進(jìn)行編碼。例如:.NETCore3.1.8表示主要版本.NETCore3.0后的第一個(gè)次要版本的第8個(gè)補(bǔ)丁。主要版本包括新增功能、新的公共API圖面和bug修復(fù),由于變更的性質(zhì),這些版本預(yù)計(jì)包含中斷性變更。次要版本也包括新功能、公共API圖面和bug修復(fù),還可能包含中斷性變更。次要版本與主要版本的區(qū)別在于變更量較小。任務(wù)2ASP.NETCore基本術(shù)語任務(wù)引入通過比較,小王決定選擇學(xué)習(xí)ASP.NETCore搭建Web項(xiàng)目,學(xué)習(xí)途徑就從權(quán)威的官方文檔開始。在查閱文檔時(shí),小王出門就遇攔路虎:官方文檔中出現(xiàn)了大量術(shù)語,如運(yùn)行時(shí)、框架、SDK、平臺(tái)、編程語言等,問題是這些術(shù)語在不同的語境代表的意義也不同。不弄懂這些基本術(shù)語,后面的學(xué)習(xí)之路就寸步難行了。知識(shí)準(zhǔn)備.NET的一些術(shù)語可能會(huì)令人困惑,因?yàn)橥粋€(gè)術(shù)語在不同的上下文中的用法不同。了解一些術(shù)語在一段時(shí)期內(nèi)的用法變化有利于理解.NET文檔。如表所示。一、運(yùn)行時(shí)二、框架三、SDK四、平臺(tái)五、編程語言.NET支持三種編程語言:(1)C#:是一種新式編程語言,不僅面向?qū)ο螅€類型安全。C#源于C語言系列,C、C++、Java和JavaScript程序員很快就可以上手使用。(2)F#:支持函數(shù)式、命令式、面向?qū)ο蟮木幊棠J?。?)VisualBasic:在.NET語言中,VisualBasic的語法最接近于人類的普通用語,因此更易于學(xué)習(xí)。VisualBasic不受Web應(yīng)用支持,但受WebAPI支持。項(xiàng)目總結(jié)項(xiàng)目二

Web應(yīng)用基礎(chǔ)知識(shí)任務(wù)1網(wǎng)頁基礎(chǔ)知識(shí)任務(wù)2配置開發(fā)環(huán)境任務(wù)1網(wǎng)頁基礎(chǔ)知識(shí)任務(wù)引入這天,小王在搜索學(xué)習(xí)資料時(shí),突然注意到瀏覽器地址欄中的URL中有一個(gè)問號(hào)“?”,里面還包含自己搜索的關(guān)鍵字,這個(gè)網(wǎng)址是什么意思呢?在他的印象中,網(wǎng)頁好像大多是以.htm或.html結(jié)尾的。他好奇地打開瀏覽器的開發(fā)者工具,看到了許多包含在“<>”中的元素,他看到的網(wǎng)頁正是這些元素呈現(xiàn)出來的。那么他搜索關(guān)鍵字,對(duì)應(yīng)的網(wǎng)頁究竟是怎樣生成的呢?網(wǎng)頁中的那些標(biāo)記又分別代表什么呢?知識(shí)準(zhǔn)備一、靜態(tài)網(wǎng)頁與動(dòng)態(tài)網(wǎng)頁通常我們看到的網(wǎng)頁,都是以.html、.shtml等為后綴的文件。在網(wǎng)站設(shè)計(jì)中,這種純粹HTML格式的網(wǎng)頁通常被稱為靜態(tài)網(wǎng)頁。靜態(tài)網(wǎng)頁的內(nèi)容是固定的,瀏覽網(wǎng)頁內(nèi)容時(shí),服務(wù)器僅僅是將已有的靜態(tài)HTML文檔傳送給瀏覽器供用戶閱讀。如果網(wǎng)站維護(hù)者要更新網(wǎng)頁的內(nèi)容,就必須手動(dòng)更新所有的HTML文檔。因此,靜態(tài)網(wǎng)頁的致命弱點(diǎn)就是不易維護(hù),為了不斷更新網(wǎng)頁內(nèi)容,就必須不斷地重復(fù)制作HTML文檔。所謂動(dòng)態(tài)網(wǎng)頁,是指服務(wù)器會(huì)針對(duì)不同的使用者以及不同的要求執(zhí)行不同的程序,從而提供不同的服務(wù),一般與數(shù)據(jù)庫有關(guān)。二、Web工作原理Web工作原理是Web應(yīng)用開發(fā)者必須了解的重要問題或概念,本節(jié)簡(jiǎn)要進(jìn)行介紹??蛻舳撕蚖eb服務(wù)器通過HTTP協(xié)議進(jìn)行通信。Web服務(wù)器指的是一個(gè)軟件程序,例如Apache、Tomcat、Nginx等,它們的作用是管理Web應(yīng)用。HTTP協(xié)議采用的是請(qǐng)求/響應(yīng)模式。當(dāng)用戶在瀏覽器中輸入要訪問的web站點(diǎn)地址或在已打開的站點(diǎn)點(diǎn)擊超鏈接,由DNS進(jìn)行域名解析,找到服務(wù)器的IP地址,向該地址指向的web服務(wù)器發(fā)出一個(gè)HTTP請(qǐng)求,相應(yīng)的Web服務(wù)器接收HTTP請(qǐng)求后,將URL地址轉(zhuǎn)換為頁面所在的服務(wù)器上的文件全名,調(diào)用相應(yīng)的web應(yīng)用處理請(qǐng)求。然后Web服務(wù)器再將響應(yīng)結(jié)果返回給客戶端。三、HTML常用標(biāo)簽HTML是HypertextMarkupLanguage(超文本標(biāo)簽語言)的首字母縮寫,是一種用于建立Web頁面的描述性語言。使用HTML編寫的網(wǎng)頁文件是標(biāo)準(zhǔn)的ASCII文件,擴(kuò)展名通常為.htm或.html。本節(jié)將簡(jiǎn)要介紹HTML中常用的一些標(biāo)簽。掌握這些標(biāo)簽的用法,對(duì)網(wǎng)頁制作可以起到事半功倍的效果。1.文檔的結(jié)構(gòu)標(biāo)簽(1)<html>標(biāo)簽(2)<head>標(biāo)簽(3)<title>標(biāo)簽(4)<body>標(biāo)簽案例——編寫“HelloWorld”網(wǎng)頁本案例利用Windows系統(tǒng)自帶的“記事本”程序編寫一個(gè)簡(jiǎn)單的網(wǎng)頁,幫助讀者加深對(duì)HTML文檔結(jié)構(gòu)和標(biāo)簽的了解。(1)打開“記事本”程序,新建一個(gè)空白的文本文件,保存在D:\sources文件夾中,命名為HelloWorld.txt。(2)在文本文件中,編寫如圖所示的代碼:(3)關(guān)閉文件后,將文件HelloWorld.txt的后綴修改為.html,然后雙擊該文件,即可在瀏覽器中顯示該文件的網(wǎng)頁效果,如圖所示。2.注釋標(biāo)簽HTML的客戶端注釋標(biāo)簽為<!--…-->,在這個(gè)標(biāo)簽內(nèi)的文本不會(huì)在瀏覽器窗口中顯示。一般將客戶端的腳本程序放在此標(biāo)簽中。3.文本格式標(biāo)簽文本格式標(biāo)簽用于控制網(wǎng)頁中文本的樣式,如大小、字體、段落樣式等。(1)<font>標(biāo)簽 (2)<b>和<i>標(biāo)簽(3)<h#>標(biāo)簽4.排版標(biāo)簽(1)<br>標(biāo)簽:用于在文本中添加一個(gè)換行符。(2)<p>標(biāo)簽:用于定義一個(gè)段落。(3)<sub>和<sup>標(biāo)簽:分別將標(biāo)簽之間的文本設(shè)置成下標(biāo)和上標(biāo)。(4)<div>標(biāo)簽:用于塊級(jí)區(qū)域的格式化顯示。(5)<span>標(biāo)簽:用于定義內(nèi)嵌的文本容器或區(qū)域,主要用于一個(gè)段落、句子甚至單詞中。5.表格標(biāo)簽(1)<table>標(biāo)簽(2)<tr>標(biāo)簽(3)<th>標(biāo)簽(4)<td>標(biāo)簽6.表單標(biāo)簽(1)<form>標(biāo)簽(2)<input>標(biāo)簽font標(biāo)簽示例效果h#標(biāo)簽示例效果案例——?jiǎng)?chuàng)建注冊(cè)頁面本案例利用<input>標(biāo)簽創(chuàng)建一個(gè)注冊(cè)頁面。(1)打開“記事本”程序,新建一個(gè)空白的文本文件,保存在D:\sources文件夾中,命名為register.html。(2)在文件中編寫如圖所示的代碼:(3)保存文檔,然后雙擊文檔,即可在瀏覽器中顯示網(wǎng)頁效果,如圖所示。(4)<select>和<option>標(biāo)簽(5)<textarea>標(biāo)簽7.其它標(biāo)簽(1)<img>標(biāo)簽(2)<a>標(biāo)簽(3)<meta>標(biāo)簽(4)<link>標(biāo)簽(5)<style>標(biāo)簽 四、CSS概述CSS是CascadingStyleSheets(層疊樣式表)的簡(jiǎn)稱,是一種對(duì)文本進(jìn)行格式化操作的高級(jí)技術(shù)。使用CSS設(shè)置頁面格式時(shí),內(nèi)容與表現(xiàn)形式是相互分離的。頁面內(nèi)容位于自身的HTML文件中,而定義代碼表現(xiàn)形式的CSS規(guī)則位于外部樣式表或HTML文檔的另一部分(通常為<head>部分)。在網(wǎng)頁中使用CSS有3種常見的方式。(1)內(nèi)嵌樣式(2)內(nèi)聯(lián)樣式(3)鏈入CSS文件示例效果案例——使用CSS格式化注冊(cè)頁面本實(shí)例創(chuàng)建CSS,對(duì)上一個(gè)案例中的網(wǎng)頁register.html進(jìn)行格式化。(1)打開網(wǎng)頁register.html,另存為register_CSS.html。(2)在<title>標(biāo)簽下方添加如下CSS代碼,設(shè)置頁面外觀。(3)保存文件,然后雙擊文件,在瀏覽器中的即可顯示使用CSS布局后的網(wǎng)頁效果,如圖所示。五、JavaScript簡(jiǎn)介JavaScript(簡(jiǎn)稱“JS”)是一種能與網(wǎng)頁進(jìn)行簡(jiǎn)單交互的輕量級(jí)即時(shí)編譯型的腳本語言,是web開發(fā)人員必須學(xué)習(xí)的3門語言中的一門:HTML定義網(wǎng)頁的內(nèi)容,CSS描述網(wǎng)頁的布局,JavaScript控制網(wǎng)頁的行為。在介紹Web工作原理時(shí)提到過,一般瀏覽器與服務(wù)器進(jìn)行交互都需要通過瀏覽器發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器處理后將結(jié)果返回給客戶端瀏覽器。為了減輕服務(wù)器的壓力,一些簡(jiǎn)單的功能(例如登錄前驗(yàn)證用戶是否輸入了必填信息、是否符合要求)可以通過JavaScript在客戶端進(jìn)行處理。案例——添加JavaScript腳本本案例在網(wǎng)頁register_CSS.html中添加JavaScript腳本,響應(yīng)“確定”按鈕的單擊事件。(1)將網(wǎng)頁register_CSS.html另存為register_JavaScript.html,然后使用“記事本”程序打開文件。(2)在<head>標(biāo)簽范圍內(nèi)添加如下JavaScript代碼:(3)刪除<form>標(biāo)簽中的action屬性,然后在“確定”按鈕的<input>標(biāo)簽中添加onclick屬性,屬性值為定義的Login_onClick()方法,如圖所示。(4)保存文件,然后雙擊網(wǎng)頁文件,在瀏覽器中預(yù)覽網(wǎng)頁效果。單擊“確定”按鈕彈出一個(gè)提示對(duì)話框,顯示“請(qǐng)確認(rèn)輸入信息無誤”,如圖所示。(5)單擊“確定”按鈕或?qū)υ捒蛴疑辖堑摹瓣P(guān)閉”按鈕,即可關(guān)閉提示對(duì)話框。任務(wù)2配置開發(fā)環(huán)境任務(wù)引入“工欲善其事,必先利其器?!睂W(xué)習(xí)了網(wǎng)頁的基礎(chǔ)知識(shí)后,小王躍躍欲試想著手開始創(chuàng)建自己的Web項(xiàng)目。在學(xué)習(xí)過程中都是使用“記事本”編寫簡(jiǎn)單的靜態(tài)網(wǎng)頁,要開發(fā)一個(gè)初具規(guī)模的Web項(xiàng)目,對(duì)于小王這個(gè)初學(xué)者來說,“記事本”顯然不能勝任。還有后期的測(cè)試、運(yùn)行,靜態(tài)網(wǎng)頁可以雙擊在瀏覽器中打開,但這種操作對(duì)動(dòng)態(tài)網(wǎng)頁行不通。有沒有簡(jiǎn)單、高效的開發(fā)工具能幫助初學(xué)者快速創(chuàng)建應(yīng)用程序呢?能不能不使用陌生的服務(wù)器環(huán)境,在自己的計(jì)算機(jī)上運(yùn)行、部署應(yīng)用程序呢?知識(shí)準(zhǔn)備一、安裝VisualStudio2019在前面的任務(wù)中,都是使用“記事本”創(chuàng)建網(wǎng)頁,雖然簡(jiǎn)單但并不方便、高效。.NET提供了針對(duì)不同操作系統(tǒng)的集成開發(fā)環(huán)境(IDE)。VisualStudio僅在Windows上運(yùn)行,具有廣泛的內(nèi)置功能,社區(qū)版對(duì)學(xué)生、開放源代碼貢獻(xiàn)者和個(gè)人免費(fèi)。VisualStudioforMac僅在macOS上運(yùn)行,用于開發(fā)適用于iOS、Android和Web的.NET應(yīng)用和游戲。VisualStudioCode提供了適用于Windows、macOS和Linux的集成開發(fā)環(huán)境。本節(jié)介紹適用于在Windows操作系統(tǒng)上創(chuàng)建Web項(xiàng)目的開發(fā)工具VisualStudio2019。(1)在官網(wǎng)/zh-cn/visualstudio/下載VisualStudio2019社區(qū)版。(2)安裝VisualStudioCommunity2019。安裝過程中,根據(jù)需要選擇工作負(fù)荷,如圖所示。(3)選擇完成后,單擊“安裝”按鈕,即可開始安裝。二、安裝配置IIS服務(wù)器如果站點(diǎn)中包含動(dòng)態(tài)網(wǎng)頁,僅僅在本地計(jì)算機(jī)上是無法對(duì)站點(diǎn)進(jìn)行完整測(cè)試的,這時(shí)需要依賴Internet服務(wù)程序。在本地計(jì)算機(jī)上安裝Internet服務(wù)程序,實(shí)際上是將本地計(jì)算機(jī)構(gòu)建成一個(gè)真正的Internet服務(wù)器,只是可以從本地計(jì)算機(jī)上直接訪問該服務(wù)器而已。換句話說,本地計(jì)算機(jī)和Internet服務(wù)器已經(jīng)合二為一。(1)單擊桌面右下角的“開始”菜單找到“設(shè)置”選項(xiàng),打開“Windows設(shè)置”窗口。選擇“程序和功能”(2)在彈出的窗口中單擊“啟用或關(guān)閉windows功能”,如圖所示。選擇“啟用或關(guān)閉Windows功能”

選中服務(wù)選項(xiàng)(3)單擊“確定”按鈕,即可開始應(yīng)用所做的更改,并顯示進(jìn)度條。(4)打開瀏覽器,在地址欄中輸入“http://localhost/”,按Enter鍵。查看IIS管理器(5)打開控制面板,查看方式設(shè)置為“大圖標(biāo)”,單擊“管理工具”類別,打開“管理工具”窗口,然后雙擊“InternetInformationServices(IIS)管理器”,如圖所示,進(jìn)入對(duì)應(yīng)的管理器窗口。(6)在“InternetInformationServices(IIS)管理器”窗口的左側(cè)面板中展開根節(jié)點(diǎn)和“網(wǎng)站”節(jié)點(diǎn),然后在節(jié)點(diǎn)“DefaultWebSite”上右擊,從彈出的快捷菜單中選擇“添加虛擬目錄”命令,如圖所示。雙擊“InternetInformationServices(IIS)管理器”選擇“添加虛擬目錄”命令(7)在彈出的“添加虛擬目錄”對(duì)話框中設(shè)置目錄的別名和物理路徑,如圖2-20所示。添加虛擬目錄”對(duì)話框(8)在“InternetInformationServices(IIS)管理器”窗口左側(cè)面板中右擊“應(yīng)用程序池”,從彈出的快捷菜單中選擇“添加應(yīng)用程序池”命令,如圖所示。(9)在打開的“添加應(yīng)用程序池”對(duì)話框中設(shè)置應(yīng)用程序池的名稱,選擇.NETCLR的版本,托管管道模式選擇“集成”,如圖所示。案例——使用IIS運(yùn)行網(wǎng)頁本案例在創(chuàng)建的虛擬目錄中添加網(wǎng)頁文件并運(yùn)行,驗(yàn)證IIS是否成功配置。(1)單擊添加的虛擬目錄sources,在對(duì)應(yīng)窗口的中間面板中雙擊“默認(rèn)文檔”進(jìn)入相應(yīng)的窗口。(2)選中創(chuàng)建的虛擬目錄,在“管理虛擬目錄”面板中單擊“瀏覽*:80(http)”運(yùn)行網(wǎng)站。

添加默認(rèn)文檔單擊“瀏覽*:80(http)”運(yùn)行成功的默認(rèn)文檔項(xiàng)目總結(jié)項(xiàng)目實(shí)戰(zhàn)本實(shí)戰(zhàn)利用記事本編寫一個(gè)網(wǎng)頁,效果如圖所示。(1)打開記事本(2)將文件保存為后綴后為.html的文件,然后雙擊在瀏覽器中預(yù)覽效果。項(xiàng)目三

C#基礎(chǔ)任務(wù)1認(rèn)識(shí)C#任務(wù)2語法規(guī)則任務(wù)3類和對(duì)象任務(wù)1認(rèn)識(shí)C#任務(wù)引入ASP.NETCore提供了實(shí)現(xiàn)Web項(xiàng)目的框架,要實(shí)現(xiàn)項(xiàng)目,還需要使用編程語言實(shí)現(xiàn)。小王有一定的C++基礎(chǔ),因此他選擇C#作為開發(fā)語言。為有針對(duì)性地學(xué)習(xí)C#語法,小王要先弄明白相較于C++,C#有哪些優(yōu)勢(shì)點(diǎn),以及C#的程序結(jié)構(gòu)。知識(shí)準(zhǔn)備一、C#簡(jiǎn)介C#(讀作CSharp)是微軟為了對(duì)抗Java而推出的一門面向?qū)ο蟮耐ㄓ眯途幊陶Z言,它去掉了C++和Java語言中的一些復(fù)雜特性,提供了可視化工具,能夠高效地編寫程序,開發(fā)PC軟件、網(wǎng)站和APP,還能作為游戲腳本,編寫游戲邏輯。C#語言具備如下幾個(gè)特點(diǎn):1.面向?qū)ο笈c其他面向?qū)ο笳Z言一樣,C#語言也具有面向?qū)ο笳Z言的基本特征,即封裝、繼承、多態(tài)。2.簡(jiǎn)單易學(xué)、安全C#的構(gòu)想十分接近于傳統(tǒng)高級(jí)語言C和C++,與Java也非常相似,但相比C、C++、Java提供了更多的數(shù)據(jù)類型,并且每個(gè)數(shù)據(jù)類型都是固定大小的。3.支持跨平臺(tái)最早的C#語言僅能在Windows平臺(tái)上開發(fā)并使用,隨著.NET框架的發(fā)展,C#已成為.NET框架的一部分,能在多個(gè)操作系統(tǒng)上使用,例如在Mac、Linux等。此外,還能將其應(yīng)用到手機(jī)、PDA等設(shè)備上。4.開發(fā)多種類型的程序使用C#語言不僅能開發(fā)在控制臺(tái)下運(yùn)行的應(yīng)用程序,也能開發(fā)Windows窗體應(yīng)用程序、網(wǎng)站、手機(jī)應(yīng)用等多種應(yīng)用程序。二、C#與.NET的關(guān)系C#是一種運(yùn)行在.NETFramework/CoreCLR上,用于創(chuàng)建應(yīng)用程序的高級(jí)編程語言。它是專為由可執(zhí)行代碼和運(yùn)行時(shí)環(huán)境組成的公共語言基礎(chǔ)結(jié)構(gòu)(CommonLanguageInfrastructure,CLI)設(shè)計(jì)的。.NET是一個(gè)包含.NETFramework、.NETCore和Mono等框架的通用開發(fā)平臺(tái),提供了一個(gè)跨語言的統(tǒng)一編程環(huán)境。.NET擁有CLI,其中包括與語言無關(guān)的運(yùn)行時(shí)和語言互操作性,允許在不同的計(jì)算機(jī)平臺(tái)和體系結(jié)構(gòu)上使用各種高級(jí)語言,使得Internet上的各應(yīng)用程序之間可以使用Web服務(wù)進(jìn)行溝通。三、C#程序結(jié)構(gòu)1.命名空間命名空間類似于文件夾,提供一種將一組名稱與其他名稱區(qū)分開的方式。2.類類使用關(guān)鍵字class定義,后跟類的名稱。3.Main方法每一個(gè)C#程序至少有一個(gè)帶有Main方法的類,它是執(zhí)行程序的入口。4.語句塊語句塊是用于執(zhí)行某個(gè)任務(wù)的表達(dá)式按邏輯順序組織在一起的一條或多條語句。5.語句終止符在C#中,所有的語句和表達(dá)式必須以分號(hào)(;)結(jié)尾。6.注釋注釋是使用一些簡(jiǎn)單易懂的語言對(duì)代碼進(jìn)行簡(jiǎn)單的解釋的方法。C#語言中包含了三種注釋符:(1)單行注釋符://(2)多行注釋符:/*要注釋的內(nèi)容*/(3)文檔注釋符:///7.大小寫的區(qū)別C#是大小寫敏感的,因此變量firstVar與firstvar是不一樣的。案例——打印"HelloWorld"(1)啟動(dòng)VisualStudio,創(chuàng)建一個(gè)新項(xiàng)目,從模板中選擇語言為C#,平臺(tái)為Windows,項(xiàng)目類型為“控制臺(tái)”,然后選中“控制臺(tái)應(yīng)用程序”,如圖所示。(2)單擊“下一步”按鈕,在打開的“配置新項(xiàng)目”窗口中輸入項(xiàng)目名稱為firstApplication,指定項(xiàng)目的保存路徑和解決方案名稱,如圖3-2所示。(3)單擊“下一步”按鈕,目標(biāo)框架選擇“.NET5.0”,然后單擊“創(chuàng)建”按鈕創(chuàng)建項(xiàng)目。此時(shí)生成一個(gè)名為Program.cs的文件,創(chuàng)建的項(xiàng)目顯示在“解決方案資源管理器”中,如圖所示。(4)在代碼編輯器中修改類名稱,并在Main()方法中添加一行代碼。(5)保存文件Program.cs,然后單擊“運(yùn)行”按鈕或者按下F5鍵運(yùn)行程序。

運(yùn)行結(jié)果任務(wù)2語法規(guī)則任務(wù)引入萬變不離其宗,學(xué)習(xí)一門語言,最根本的是掌握其編寫規(guī)則,小王深深地明白這個(gè)道理。通過查閱資料,小王發(fā)現(xiàn)大多數(shù)編程語言的基本要素都是相同的,例如數(shù)據(jù)類型、常量和變量、運(yùn)算符和表達(dá)式,以及最核心的流程控制。當(dāng)然,不同的語言,規(guī)則編寫方式也會(huì)有所不同。為順利開發(fā)出Web項(xiàng)目,小王暗自給自己鼓勁,一定要打好基礎(chǔ)。知識(shí)準(zhǔn)備任何一門編程語言在編寫代碼時(shí)都必須遵循一定的規(guī)則,這個(gè)規(guī)則就是語法。C#語言是在C、C++的基礎(chǔ)上發(fā)展而來的,因此在語法形式上有些類似。一、基本數(shù)據(jù)類型數(shù)據(jù)類型主要用于指明變量和常量存儲(chǔ)值的類型,C#語言是一種強(qiáng)類型語言,要求每個(gè)變量都必須指定數(shù)據(jù)類型。1.整型表

整型取值范圍2.浮點(diǎn)型3.字符型和字符串類型4.布爾類型浮點(diǎn)型取值范圍常用的轉(zhuǎn)義字符二、常量和變量常量和變量都是用于存儲(chǔ)數(shù)據(jù)的容器,在定義時(shí)都需要指明數(shù)據(jù)類型,它們唯一的區(qū)別是:常量中存放的值不允許更改,而變量中所存放的值是允許更改的。常量可以看作是一種特殊的變量,只不過這種變量在定義時(shí)必須被賦值,且之后不能重新賦值或更改。案例——定義客戶信息本案例分別定義字符串類型、整型、浮點(diǎn)型和布爾型變量初始化客戶信息,最后輸出客戶信息。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目(2)保存代碼文檔,按F5執(zhí)行代碼,運(yùn)行結(jié)果如圖所示。三、運(yùn)算符和表達(dá)式運(yùn)算符是每一種編程語言中必備的符號(hào),能夠提供對(duì)數(shù)值、字符串、邏輯值進(jìn)行運(yùn)算。表達(dá)式是由常量、變量、函數(shù)和運(yùn)算符按照運(yùn)算法則組成的計(jì)算關(guān)系式。在數(shù)據(jù)運(yùn)算中,使用表達(dá)式表達(dá)想要達(dá)到的效果,使用運(yùn)算符進(jìn)行相關(guān)的運(yùn)算。下面簡(jiǎn)要介紹C#中常見的運(yùn)算符:賦值運(yùn)算符、算術(shù)運(yùn)算符、邏輯運(yùn)算符、比較運(yùn)算符、三元運(yùn)算符以及運(yùn)算符的優(yōu)先級(jí)。1.賦值運(yùn)算符

各種賦值運(yùn)算符的具體說明2.算術(shù)運(yùn)算符3.邏輯運(yùn)算符4.比較運(yùn)算符5.位運(yùn)算符6.三元運(yùn)算符語法說明如下:布爾表達(dá)式:條件判斷表達(dá)式,通過邏輯判斷,得到一個(gè)bool類型的結(jié)果。表達(dá)式1:布爾表達(dá)式的結(jié)果為True,執(zhí)行該表達(dá)式得到結(jié)果。表達(dá)式2:布爾表達(dá)式的結(jié)果為False,執(zhí)行該表達(dá)式得到結(jié)果。7.運(yùn)算符的優(yōu)先級(jí)四、流程控制語句任何一門編程語言都要面臨程序的結(jié)構(gòu)設(shè)計(jì),也就是控制程序的流程,安排每行代碼執(zhí)行的先后次序。1.順序執(zhí)行語句順序結(jié)構(gòu)就是按照代碼的順序,逐行執(zhí)行操作。2.條件判斷語句如果程序有多種可能的選擇,就是利用不同的條件判斷結(jié)果去執(zhí)行不同的語句或者代碼,從而選擇某一個(gè)分支。(1)if語句

(2)if..else語句(3)if..elseif…else語句案例——計(jì)算分段函數(shù)本案例編寫一個(gè)求分段函數(shù)的程序,并用它來求f(1.5)的值。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目SectionalFunction(2)按F5鍵執(zhí)行上面的代碼,運(yùn)行結(jié)果如圖所示。

3.switch...case語句switch語句屬于多條件分支語句,相當(dāng)于一系列的if..elseif..語句,但switch語句不是對(duì)條件進(jìn)行計(jì)算以獲得布爾值,而是對(duì)表達(dá)式進(jìn)行求值并根據(jù)計(jì)算結(jié)果確定要執(zhí)行的語句塊。案例——?jiǎng)澐殖煽?jī)等級(jí)本案例使用switch...case語句根據(jù)輸入的學(xué)生成績(jī)判斷等級(jí)。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目(2)保存代碼文檔,按F5執(zhí)行代碼。輸入76的運(yùn)行結(jié)果如圖所示。4.循環(huán)語句循環(huán)語句是指根據(jù)指定的條件多次執(zhí)行同一段代碼,重復(fù)的次數(shù)由指定的數(shù)值或條件決定,常用于檢索和批量處理。(1)先進(jìn)行條件判斷,若條件成立,執(zhí)行循環(huán)體代碼,執(zhí)行完之后再進(jìn)行條件判斷,條件成立繼續(xù),否則退出循環(huán)。(2)先不管條件依次執(zhí)行操作,執(zhí)行完成之后進(jìn)行條件判斷,若條件成立,循環(huán)繼續(xù),否則退出循環(huán)。案例——數(shù)值排序本實(shí)例分別使用while和dowhile語句對(duì)兩個(gè)數(shù)值進(jìn)行排序,比較兩者的區(qū)別。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目OrderNmbers(2)按F5鍵運(yùn)行程序,在輸出屏幕中首先輸出變量a,然后根據(jù)提示輸入一個(gè)整數(shù)6,賦值給變量b。此時(shí),由于條件a>b不成立,所以while循環(huán)體中的語句并不執(zhí)行,效果如圖所示。(3)注釋或刪除主方法中的while語句,修改為do...while循環(huán)語句(4)按F5執(zhí)行上面的語句,效果如圖所示。(5)中斷循環(huán)語句執(zhí)行循環(huán)語句時(shí),如果要跳出循環(huán),就需要用到中斷循環(huán)語句:break語句和continue語句。案例——計(jì)算數(shù)列的累和本案例通過計(jì)算一個(gè)整數(shù)序列的累和,比較break語句和continue語句的不同。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目BreakDemo。(2)刪除代碼文件主方法Main()中的默認(rèn)代碼(3)按F5運(yùn)行程序,顯示計(jì)算結(jié)果,如圖所示。(4)將代碼中的break語句修改為continue語句(5)按F5運(yùn)行程序,顯示計(jì)算結(jié)果,如圖所示。任務(wù)3類和對(duì)象任務(wù)引入既然學(xué)習(xí)面向?qū)ο蟮木幊陶Z言C#,類和對(duì)象自然是繞不過去的。小王覺得類和對(duì)象既熟悉又陌生,熟悉是因?yàn)樗鼈兊母拍詈捅憩F(xiàn)形式類似自然語言,簡(jiǎn)單易懂;陌生的是類成員以及各種修飾符。該如何定義類的各種成員并使用類對(duì)象呢?這些修飾符對(duì)訪問類對(duì)象有什么影響呢?知識(shí)準(zhǔn)備一、定義類類是面向?qū)ο笳Z言中最常用的元素,每一個(gè)C#程序都離不開類。所謂面向?qū)ο笫侵冈诰幊虝r(shí)將任何事物都看成是一個(gè)對(duì)象來描述。對(duì)象包括屬性和方法,屬性是指對(duì)象固有的特征,方法則是對(duì)象的行為。類的訪問修飾符:用于設(shè)定對(duì)類的訪問限制,包括public、internal或者不寫。修飾符:修飾符是對(duì)類本身特點(diǎn)的描述,包括abstract、sealed和static。類名:用于描述類的功能的字符串,最好具有實(shí)際意義,以便理解類中描述的內(nèi)容。類的成員:在類中能定義的元素,主要包括字段、屬性、方法。二、定義字段類的成員可分為兩類:數(shù)據(jù)成員和函數(shù)成員。其中,數(shù)據(jù)成員包括與該類相關(guān)聯(lián)的常量和變量(稱為字段);函數(shù)成員主要包括屬性、方法、構(gòu)造函數(shù)和析構(gòu)函數(shù)。字段的定義與前面介紹的變量和常量的定義類似,只是在變量或常量前面可以加上訪問修飾符、修飾符。1.訪問修飾符類成員的訪問修飾符有4個(gè),具體用法如下。(1)public成員可以被任何代碼訪問。(2)private成員僅能被同一個(gè)類中的代碼訪問,省略訪問修飾符時(shí),默認(rèn)為private。(3)internal成員僅能被同一個(gè)項(xiàng)目中的代碼訪問。(4)protected成員只能由類或派生類中的代碼訪問。2.修飾符字段有兩個(gè)常用的修飾符:readonly(只讀)和static(靜態(tài)的)。表

字段的默認(rèn)值三、定義方法方法是將完成同一功能的內(nèi)容放到一起,方便調(diào)用的一種方式,例如應(yīng)用程序中默認(rèn)生成的主方法Main()。訪問修飾符可以是類成員訪問修飾符中的任意一種,如果省略,默認(rèn)為private。方法的修飾符包括virtual(虛擬的)、abstract(抽象的)、override(重寫的)、static(靜態(tài)的)、sealed(密封的)。案例——計(jì)算階乘本案例編寫一個(gè)方法,計(jì)算給定整數(shù)的階乘。具體操作如下:新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目上述代碼定義了一個(gè)計(jì)算非負(fù)整數(shù)n的階乘的方法,輸入?yún)?shù)為整型n,返回值為整型。如果輸入?yún)?shù)為負(fù)值,則輸出一條提示信息。如果輸入?yún)?shù)為0,則階乘結(jié)果為1,否則利用for循環(huán)計(jì)算n!,最后輸出計(jì)算結(jié)果。四、創(chuàng)建類對(duì)象定義了類及其中的類成員之后,就可以在程序中創(chuàng)建類的對(duì)象,訪問類中的成員。創(chuàng)建類的對(duì)象,可以理解為基于一個(gè)模板定制一個(gè)對(duì)象。案例——訪問類成員示例本案例定義一個(gè)類,然后創(chuàng)建類對(duì)象,通過調(diào)用類的方法,輸出類中定義的屬性。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目ClassDemo。(2)在菜單欄選擇“項(xiàng)目→添加類”命令,在當(dāng)前項(xiàng)目中添加一個(gè)默認(rèn)名稱為Class1.cs的類文件(3)修改類名,并定義類成員(4)切換到Program.cs,刪除主方法Main()中默認(rèn)的打印語句,然后添加語句創(chuàng)建類對(duì)象,訪問類成員函數(shù)。(5)保存所有文件,按F5運(yùn)行程序,打開控制臺(tái)窗口,顯示運(yùn)行結(jié)果。由于本例沒有為屬性賦值,因此輸出各個(gè)屬性的默認(rèn)值,如圖所示。(6)在主程序中添加代碼,分別為自定義的三個(gè)屬性賦值。(7)保存所有文件,按F5運(yùn)行程序,顯示運(yùn)行結(jié)果,如圖所示。五、構(gòu)造函數(shù)與析構(gòu)函數(shù)上面的實(shí)例介紹了使用“類名對(duì)象名=new類名()”的方式創(chuàng)建類對(duì)象的方法。“類名()”的形式實(shí)際上是系統(tǒng)自動(dòng)生成的一個(gè)不包含參數(shù)的類的構(gòu)造函數(shù)。構(gòu)造函數(shù)的名稱與類的名稱相同。在實(shí)際應(yīng)用中,如果自動(dòng)生成的構(gòu)造函數(shù)不能滿足程序需要,通常要自定義構(gòu)造函數(shù)。案例——定義Student類本案例定義一個(gè)學(xué)生類StudentInfo,包含一個(gè)自定義的構(gòu)造函數(shù)為類中的屬性賦值,一個(gè)成員函數(shù)用于輸出學(xué)生信息,以及一個(gè)析構(gòu)函數(shù)。(1)新建一個(gè)控制臺(tái)應(yīng)用程序的項(xiàng)目StudentClass。(2)在菜單欄選擇“項(xiàng)目→添加類”命令,在當(dāng)前項(xiàng)目中添加一個(gè)默認(rèn)名稱為Class1.cs的類文件。(3)切換到Program.cs,修改主方法Main()中的代碼,創(chuàng)建類對(duì)象并賦值,然后輸出指定的學(xué)生信息。(4)按F5鍵運(yùn)行程序,結(jié)果如圖所示。項(xiàng)目總結(jié)項(xiàng)目實(shí)戰(zhàn)本實(shí)戰(zhàn)編寫C#代碼,打印九九乘法表。新建一個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目,在代碼文件中編寫如下代碼:在上面的代碼中,\t是轉(zhuǎn)義字符,用于輸出制表符。Console.Write()輸出指定的字符串,不換行,Console.Writeline()語句用于換行。項(xiàng)目四

ASP.NETCore核心組件任務(wù)1認(rèn)識(shí)ASP.NETCoreWeb程序任務(wù)2核心組件任務(wù)1認(rèn)識(shí)ASP.NETCoreWeb程序任務(wù)引入經(jīng)過一段時(shí)間的學(xué)習(xí)積累,小王終于有信心正式開始Web應(yīng)用項(xiàng)目的創(chuàng)建。打開VisualStudio,看著眾多的項(xiàng)目模板,小王有點(diǎn)不知所措了,對(duì)于初學(xué)者,選擇哪個(gè)模板可以幫助自己快速開啟Web項(xiàng)目開發(fā)之路呢?項(xiàng)目模板提供的文件結(jié)構(gòu)中,各個(gè)目錄分別有什么用呢?知識(shí)準(zhǔn)備一、創(chuàng)建ASP.NETCore項(xiàng)目VisualStudio2019提供了豐富的項(xiàng)目模板,每個(gè)模板都提供了相應(yīng)的代碼基架,方便用戶快速掌握項(xiàng)目的基本結(jié)構(gòu)。(1)啟動(dòng)VisualStudio2019,單擊“創(chuàng)建新項(xiàng)目”命令,打開對(duì)應(yīng)的窗口。該窗口中顯示最近使用的項(xiàng)目模板和內(nèi)置的項(xiàng)目模板。(2)在項(xiàng)目模板中選擇需要的模板。在模板列表頂部設(shè)置編程語言、應(yīng)用平臺(tái)和項(xiàng)目類型,可快速找到需要的模板。ASP.NETCoreWeb應(yīng)用:

ASP.NETCore空:ASP.NETCoreWeb應(yīng)用(模型-視圖-控制器):ASP.NETCoreWebAPI:選擇項(xiàng)目模板(3)單擊“下一步”按鈕配置新項(xiàng)目。輸入項(xiàng)目名稱和保存路徑,如圖所示。(4)單擊“下一步”按鈕,選擇目標(biāo)框架為“.NETCore3.1(長(zhǎng)期支持)”;身份驗(yàn)證類型為“無”,并取消“配置HTTPS”復(fù)選框,如圖所示。(5)單擊“創(chuàng)建”按鈕,即可創(chuàng)建一個(gè)ASP.NETCoreWeb應(yīng)用程序,“解決方案資源管理器”面板中顯示創(chuàng)建的項(xiàng)目,如圖所示。二、認(rèn)識(shí)項(xiàng)目文件打開項(xiàng)目的保存路徑,在項(xiàng)目所在的文件中(如圖),可以看到一個(gè)以“項(xiàng)目名稱+.csproj”命令的文件,例如FirstWebApplication.csproj,該文件即為項(xiàng)目文件,后綴中的“cs”表示以C#作為開發(fā)語言。選擇“編輯項(xiàng)目文件”命令項(xiàng)目文件的代碼三、程序入口文件項(xiàng)目創(chuàng)建成功后,應(yīng)用程序的入口文件為Program.cs,雙擊即可在編輯器中打開該文件,如圖所示。四、程序啟動(dòng)文件在解決方案資源管理器中,還有一個(gè)名為Startup.cs的文件,該文件是ASP.NETCore中的啟動(dòng)類文件,用于配置服務(wù)和應(yīng)用的請(qǐng)求管道。在方法CreateHostBuilder()中可以看到,語句webBuilder.UseStartup<Startup>();使用UseStartup()的擴(kuò)展方法配置Startup類。雙擊Startup.cs在編輯器中打開啟動(dòng)文件,如圖所示。五、程序配置提供程序在解決方案資源管理器中展開“Properties”,即可看到程序的配置提供程序launchSettings.json。雙擊文件名,在編輯器中打開配置提供程序,如圖所示。配置提供程序“運(yùn)行”下拉列表任務(wù)2核心組件任務(wù)引入小王根據(jù)所學(xué),利用項(xiàng)目模板創(chuàng)建了一個(gè)ASP.NETCoreWeb應(yīng)用項(xiàng)目,打開其中一個(gè)文件,小王又傻眼了——完全不知道那些預(yù)置的基架代碼有什么用。他去請(qǐng)教老師,老師簡(jiǎn)單地給他講解了一下ASP.NETCoreWeb應(yīng)用的工作流,并建議他很有必要先了解其中涉及的幾個(gè)核心組件。了解了這些,自然就看得懂其中的代碼了。知識(shí)準(zhǔn)備一、配置ASP.NETCore提供了配置框架,可以從配置提供程序的有序集中將設(shè)置作為名稱或鍵值對(duì)。適用于各種源的內(nèi)置配置提供程序有.json文件、xml文件、環(huán)境變量和命令行參數(shù)。此外,用戶還可以編寫自定義配置提供程序。環(huán)境變量ASPNETCORE_ENVIRONMENT受配置框架支持的值有三個(gè):Development、Staging和Production。如果沒有設(shè)置,則默認(rèn)為Production。Development:開發(fā)環(huán)境,通常用于日常開發(fā)工作,可以啟用未在生產(chǎn)中公開的功能。例如,開發(fā)異常頁面,便于開發(fā)人員查找異常的根本原因并修復(fù)。Staging:演示環(huán)境,主要用于識(shí)別任何與部署相關(guān)的問題,通常配置為盡可能與實(shí)際生產(chǎn)環(huán)境一致的測(cè)試或者模擬環(huán)境。Production:生產(chǎn)環(huán)境,用于日常業(yè)務(wù)的實(shí)際環(huán)境,應(yīng)配置為最大限度地提高安全性、性能和應(yīng)用可靠性。案例——設(shè)置環(huán)境變量本案例介紹通過GUI修改環(huán)境變量,設(shè)置launchSettings文件的方法。(1)在VisualStudio的解決方案資源管理器中右擊項(xiàng)目名稱,從彈出的快捷菜單中選擇“屬性”命令。(2)在打開的屬性面板中選擇“調(diào)試”分類,在這里可以修改配置提供程序launchSettings.json中的設(shè)置,如圖所示。(3)在“配置文件”和“啟動(dòng)”下拉列表框中選擇通過按F5鍵從VisualStudio運(yùn)行項(xiàng)目時(shí)的配置信息。(4)雙擊“值”字段,可以根據(jù)應(yīng)用程序的運(yùn)行環(huán)境修改環(huán)境變量的值。本案例修改為Staging。(5)如果要添加環(huán)境變量,單擊“添加”按鈕,然后分別在“鍵”和“值”字段中輸入配置鍵和配置值。(6)保存設(shè)置。二、依賴注入所謂依賴注入(DI),就是把有依賴關(guān)系的類放到容器中,解析出這些類的實(shí)例的設(shè)計(jì)模式理念,目的是實(shí)現(xiàn)類的解耦。在項(xiàng)目中應(yīng)用DI,有依賴關(guān)系的類之間以配置文件組織在一起,而不是以硬編碼的方式耦合在一起,從而使代碼變得異常簡(jiǎn)單并且更容易理解和測(cè)試。ASP.NETCore內(nèi)置依賴關(guān)系注入(DI)框架,可使配置的服務(wù)適用于應(yīng)用的類。1.AddSingleton()方法該方法創(chuàng)建一個(gè)Singleton服務(wù)。這種注冊(cè)服務(wù)是單一實(shí)例生存期服務(wù),在第一次請(qǐng)求時(shí)創(chuàng)建Singleton服務(wù),然后所有后續(xù)請(qǐng)求都使用相同的實(shí)例。2.AddTransient()方法該方法創(chuàng)建一個(gè)Transient服務(wù),每次請(qǐng)求時(shí),都會(huì)創(chuàng)建一個(gè)新的Transient服務(wù)實(shí)例,因此是暫時(shí)生存期服務(wù),適用于輕量級(jí)、無狀態(tài)的服務(wù)。3.AddScoped()方法該方法創(chuàng)建一個(gè)Scoped服務(wù),是作用域生存期服務(wù),每個(gè)客戶端請(qǐng)求(連接)一次創(chuàng)建一個(gè)新的Scoped服務(wù)實(shí)例,范圍內(nèi)的每個(gè)請(qǐng)求中使用同一個(gè)Scoped服務(wù)實(shí)例。三、中間件在ASP.NETCore中,中間件是一個(gè)可組裝到應(yīng)用程序管道中以處理HTTP請(qǐng)求和響應(yīng)的軟件管道。ASP.NETCore使用中間件設(shè)置請(qǐng)求處理管道,每個(gè)中間件組件可選擇是否將請(qǐng)求傳遞到管道中的下一個(gè)組件,并可在管道中的下一個(gè)組件前后執(zhí)行工作。中間件處理每個(gè)HTTP請(qǐng)求,一系列中間件構(gòu)成請(qǐng)求處理管道。請(qǐng)求處理管道需按照中間件添加到管道的順序依次調(diào)用執(zhí)行,如圖所示,沿黑色箭頭執(zhí)行。1.通過Use()方法注冊(cè)使用這種方式注冊(cè)中間件時(shí),Use()方法會(huì)對(duì)請(qǐng)求做一些工作或處理,例如在請(qǐng)求上添加一些上下文數(shù)據(jù)。2.通過Run()方法注冊(cè)使用這種方式注冊(cè)中間件時(shí),Run()方法會(huì)直接返回一個(gè)響應(yīng),此時(shí)后續(xù)的中間件不會(huì)被執(zhí)行。3.通過Map()方法注冊(cè)使用這種方式注冊(cè)中間件時(shí),Map()方法會(huì)將請(qǐng)求重新定向到其他中間件路徑上。了解了注冊(cè)中間件的方法,接下來簡(jiǎn)要介紹常見應(yīng)用場(chǎng)景中使用的一些中間件組件。(1)異常/錯(cuò)誤處理(2)HTTPS重定向中間件(UseHttpsRedirection)(3)靜態(tài)文件中間件(UseStaticFiles)(4)Cookie策略中間件(UseCookiePolicy)(5)路由中間件(UseRouting)(6)身份驗(yàn)證中間件(UseAuthentication)(7)授權(quán)中間件(UseAuthorization)(8)會(huì)話中間件(UseSession)(9)終結(jié)點(diǎn)路由中間件(帶有MapRazorPages的UseEndpoints)案例——注冊(cè)中間件示例本案例使用Use()方法和Run()方法注冊(cè)中間件,幫助讀者進(jìn)一步掌握注冊(cè)中間件的方法,熟悉中間件的工作原理及注冊(cè)順序和響應(yīng)順序。(1)啟動(dòng)VisualStudio2019,利用ASP.NETCoreWeb應(yīng)用程序模板創(chuàng)建一個(gè)項(xiàng)目MiddlewareDemo。(2)雙擊打開Startup.cs文件,刪除Configure()方法中的默認(rèn)代碼,分別使用Use()方法和Run()方法注冊(cè)三個(gè)中間件。(3)按F5鍵運(yùn)行程序,在瀏覽器中顯示如圖所示的運(yùn)行結(jié)果。四、路由與終結(jié)點(diǎn)路由是基于URL的一個(gè)中間件框架,負(fù)責(zé)匹配傳入的HTTP請(qǐng)求,然后將這些請(qǐng)求發(fā)送到應(yīng)用的可執(zhí)行終結(jié)點(diǎn)。終結(jié)點(diǎn)是應(yīng)用的可執(zhí)行請(qǐng)求處理代碼單元,在應(yīng)用中進(jìn)行定義,并在應(yīng)用啟動(dòng)時(shí)進(jìn)行配置。終結(jié)點(diǎn)匹配過程可以從請(qǐng)求的URL中提取值,并為請(qǐng)求處理提供這些值。通過使用應(yīng)用中的終結(jié)點(diǎn)信息,路由還能生成映射到終結(jié)點(diǎn)的URL。1.配置路由應(yīng)用程序啟動(dòng)時(shí),會(huì)將路由中間件添加到請(qǐng)求處理管道中,并將配置好的路由加載到路由集合。路由分為兩種映射模式:傳統(tǒng)路由和特性路由。(1)配置傳統(tǒng)路由路由配置參數(shù)URL的具體映射信息表(2)配置特性路由五、異常處理在Startup.Configure()方法中添加以下代碼,即可當(dāng)應(yīng)用在開發(fā)環(huán)境中運(yùn)行時(shí)啟用開發(fā)人員異常頁,顯示請(qǐng)求異常的詳細(xì)信息;在非開發(fā)環(huán)境中使用UseExceptionHandler()添加異常處理中間件,直接顯示對(duì)應(yīng)的錯(cuò)誤頁面:ASP.NETCoreWeb應(yīng)用程序模板在“Pages”文件夾中提供了錯(cuò)誤頁面Error.cshtml,如圖所示。項(xiàng)目總結(jié)項(xiàng)目實(shí)戰(zhàn)本實(shí)戰(zhàn)配置傳統(tǒng)路由,通過練習(xí),幫助讀者可以進(jìn)一步理解和掌握路由配置的參數(shù)和方法。(1)啟動(dòng)VisualStudio,創(chuàng)建一個(gè)ASP.NETCoreWeb應(yīng)用程序ConfigureRouting。所有ASP.NETCore模板都包括生成的代碼中的路由。(2)在Startup.Configure()方法中注冊(cè)路由,并進(jìn)行配置。路由使用一對(duì)由UseRouting()和UseEndpoints()注冊(cè)的中間件。UseRouting向中間件管道添加路由匹配,此中間件會(huì)查看應(yīng)用中定義的終結(jié)點(diǎn)集,并根據(jù)請(qǐng)求選擇最佳匹配。UseEndpoints向中間件管道添加終結(jié)點(diǎn)執(zhí)行,它會(huì)運(yùn)行與所選終結(jié)點(diǎn)關(guān)聯(lián)的委托。在終結(jié)點(diǎn)路由中間件中,MapGet()方法定義終結(jié)點(diǎn)。終結(jié)點(diǎn)可以通過匹配URL和HTTP方法來選擇,也可以通過運(yùn)行委托來執(zhí)行。當(dāng)HTTPGET請(qǐng)求發(fā)送到根URL/時(shí),將執(zhí)行顯示的請(qǐng)求委托,將字符串“HelloWorld!”寫入HTTP響應(yīng)。如果請(qǐng)求方法不是GET或根URL不是/,則無路由匹配,返回HTTP404。項(xiàng)目五

ASP.NETCoreMVC設(shè)計(jì)模式任務(wù)1認(rèn)識(shí)ASP.NETCoreMVC任務(wù)2創(chuàng)建MVC應(yīng)用任務(wù)1認(rèn)識(shí)ASP.NETCoreMVC任務(wù)引入小王想畢業(yè)后從事電商行業(yè),搭建一個(gè)屬于自己的小型電子商務(wù)平臺(tái)。通過對(duì)目前市面上主流的電商網(wǎng)站進(jìn)行分析,小王發(fā)現(xiàn)這些電商平臺(tái)都采用了MVC模式進(jìn)行開發(fā)。為此,小王覺得有必要好好研究一下MVC設(shè)計(jì)模式的構(gòu)成,以及工作原理。知識(shí)準(zhǔn)備一、什么是MVC模式MVC模式是一種流行的Web應(yīng)用程序的開發(fā)設(shè)計(jì)模式,用于實(shí)現(xiàn)應(yīng)用程序的用戶界面層的架構(gòu)設(shè)計(jì)。該模式強(qiáng)大簡(jiǎn)潔,尤其適合應(yīng)用在Web應(yīng)用程序中,有3個(gè)基本部分:模型(Model)、視圖(View)和控制器(Controller)。模型:表示應(yīng)用數(shù)據(jù)的類,是存儲(chǔ)或處理數(shù)據(jù)的組件,主要用于業(yè)務(wù)邏輯層對(duì)實(shí)體類對(duì)應(yīng)的數(shù)據(jù)庫進(jìn)行操作。視圖:是用戶接口層組件,主要用于呈現(xiàn)用戶界面(UI),包括輸入與輸出。控制器:是處理瀏覽器請(qǐng)求的類,主要負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求、對(duì)請(qǐng)求進(jìn)行處理,將數(shù)據(jù)從模型中獲取并傳給指定的視圖。MVC模式中3個(gè)組件之間的關(guān)系如圖所示。二、MVC工作原理了解MVC設(shè)計(jì)模式的工作原理有利于快速掌握MVC模式的架構(gòu)和項(xiàng)目的開發(fā)流程。MVC模式從Web瀏覽器發(fā)出請(qǐng)求到響應(yīng)的流程如圖所示。任務(wù)2創(chuàng)建MVC應(yīng)用任務(wù)引入了解了MVC模式的構(gòu)成和優(yōu)勢(shì),小王便開始著手準(zhǔn)備一個(gè)簡(jiǎn)單的電子商務(wù)商店。View的定義相對(duì)比較清晰,就是用戶界面,能夠及時(shí)、正確地響應(yīng)用戶請(qǐng)求的控制器,以及請(qǐng)求過程中訪問的模型實(shí)體類分別該如何定義實(shí)現(xiàn)分層呢?帶著這些疑問,小王繼續(xù)MVC學(xué)習(xí)之旅。知識(shí)準(zhǔn)備ASP.NETCoreMVC是使用“模型-視圖-控制器”設(shè)計(jì)模式構(gòu)建Web應(yīng)用和API的豐富框架,該框架是輕量級(jí)、開源、高度可測(cè)試的演示框架,對(duì)ASP.NETCore進(jìn)行了優(yōu)化,提供一種基于模式的方式,用于生成可徹底分開管理事務(wù)的動(dòng)態(tài)網(wǎng)站。一、創(chuàng)建ASP.NETCoreMVC項(xiàng)目VisualStudio2019提供的ASP.NETCoreWeb應(yīng)用(模型-視圖-控制器)模板包含ASP.NETCoreMVC視圖和控制器示例,可幫助初學(xué)者快速創(chuàng)建一個(gè)ASP.NETCoreMVC項(xiàng)目。案例——?jiǎng)?chuàng)建MVC項(xiàng)目FirstMVC本案例利用模板創(chuàng)建一個(gè)MVC基礎(chǔ)入門項(xiàng)目。(1)啟動(dòng)VisualStudio2019,單擊“創(chuàng)建新項(xiàng)目”選項(xiàng),在“創(chuàng)建新項(xiàng)目”窗口中選擇項(xiàng)目模板為ASP.NETCoreWeb應(yīng)用(模型-視圖-控制器),如圖所示。(2)單擊“下一步”按鈕,打開“配置新項(xiàng)目”窗口。設(shè)置項(xiàng)目名稱為FirstMVC,項(xiàng)目位置保留默認(rèn)設(shè)置,解決方案名稱為Demos,如圖所示。(3)單擊“下一步”按鈕,打開“其他信息”窗口,設(shè)置目標(biāo)框架為“.NETCore3.1(長(zhǎng)期支持)”,身份驗(yàn)證類型選擇“無”,如圖所示。(4)單擊“創(chuàng)建”按鈕,VisualStudio基于指定的模板和參數(shù)創(chuàng)建一個(gè)可正常運(yùn)行的MVC入門項(xiàng)目。在解決方案資源管理器中可以看到該項(xiàng)目的文件結(jié)構(gòu),如圖所示。(5)利用組合快捷鍵Ctrl+F5在非調(diào)試模式下運(yùn)行應(yīng)用,彈出如圖所示的提示對(duì)話框(6)如果信任IISExpressSSL證書,單擊“是”按鈕,彈出如圖所示的安全警告。(7)如果信任開發(fā)證書,請(qǐng)選擇“是”按鈕,VisualStudio即可啟動(dòng)IISExpress并運(yùn)行應(yīng)用,打開瀏覽器顯示運(yùn)行結(jié)果,如圖所示。二、添加控制器控制器用于按邏輯對(duì)一組操作進(jìn)行定義和分組,以便共同應(yīng)用路由、緩存和授權(quán)等通用規(guī)則集。操作是控制器上一種用于處理請(qǐng)求的方法。控制器是一個(gè)可實(shí)例化的類,創(chuàng)建方式有以下三種:類名稱帶有Controller后綴該類繼承帶有Controller后綴的類[Controller]特性可應(yīng)用于該類案例——添加控制器DemoController本案例在MVC項(xiàng)目FirstMVC中添加控制器DemoController。(1)打開項(xiàng)目,在“解決方案資源管理器”中,右擊Controllers文件夾,在彈出的快捷菜單中選擇“添加”→“控制器”命令,如圖所示。(2)執(zhí)行命令后,彈出“添加已搭建基架的新項(xiàng)”窗口,在這里可選擇MVC控制器模板,如圖所示。(3)選擇“MVC控制器-空”選項(xiàng),然后單擊“添加”按鈕,打開“添加新項(xiàng)”對(duì)話框。在對(duì)話框底部輸入控制器的名稱,如圖所示。(4)單擊“添加”按鈕,即可完成控制器的創(chuàng)建,并在編輯器中打開自定義的控制器類文件DemoController.cs。(5)根據(jù)需要,可以在控制器中定義多個(gè)操作方法,并在操作方法中輸入業(yè)務(wù)處理代碼。三、添加視圖視圖(View)用于處理應(yīng)用的數(shù)據(jù)表示和用戶交互,是嵌入了Razor標(biāo)記的HTML模板,以.cshtml為文件擴(kuò)展名,提供了一種巧妙的方法使用C#創(chuàng)建HTML輸出。Razor標(biāo)記是一段用于與HTML進(jìn)行交互,生成在客戶端呈現(xiàn)的網(wǎng)頁的代碼。MVC中的視圖大多數(shù)情況下只呈現(xiàn)Controller提供給它的Model數(shù)據(jù),其邏輯應(yīng)盡量簡(jiǎn)單。展開解決方案資源管理器中的Views文件夾,可以看到該文件夾中包含Home文件夾、Shared文件夾和兩個(gè).cshtml文件,如圖所示。運(yùn)行結(jié)果展開Views文件夾中的Shared文件夾,雙擊_Layout.cshtml文件可以查看對(duì)應(yīng)的布局代碼,如圖所示。上述代碼呈現(xiàn)的頁面,即為按F5鍵或單擊“IISExpress”按鈕運(yùn)行程序的顯示頁面,如圖所示。案例——為Index()方法添加視圖本案例為控制器DemoController中的Index()方法添加視圖文件。(1)在要添加視圖的方法上單擊右鍵,從彈出的快捷菜單中選擇“添加視圖”命令,如圖所示。(2)在彈出的“添加已搭建基架的新項(xiàng)”窗口中選擇視圖模板,例如選擇“Razor視圖-空”,如圖所示。(3)單擊“添加”按鈕,在彈出的“添加新項(xiàng)”窗口中輸入視圖名稱,如圖所示。(4)單擊“添加”按鈕,開始搭建基架并生成項(xiàng)目。搭建完成后,在VisualStudio的編輯區(qū)自動(dòng)打開創(chuàng)建的視圖文件Demo.cshtml,并在解決方案資源管理器中的Views文件夾中生成一個(gè)與創(chuàng)建的視圖同名(Demo)的文件夾,如圖所示。(5)在視圖文件中添加要呈現(xiàn)的頁面效果代碼。(6)雙擊打開控制器類文件DemoController.cs,修改Index()方法的返回類型以及返回方式(7)保存文件。打開瀏覽器,在地址欄中輸入https://localhost:44395/demo/index,按Enter鍵,即可顯示指定的頁面,如圖所示。四、添加模型在MVC設(shè)計(jì)模式中,控制器接收到用戶請(qǐng)求后,使用模型處理數(shù)據(jù)庫中的數(shù)據(jù),并為視圖提供所需的模型數(shù)據(jù)。例如,如果希望在HTML表格中顯示Customs類的數(shù)據(jù),可以將View和Customs對(duì)象放在一起,Customs對(duì)象是將客戶數(shù)據(jù)傳遞給View的模型。如果要在MVC項(xiàng)目中添加數(shù)據(jù)模型類,執(zhí)行以下操作:(1)打開要添加模型的ASP.NETCoreMVC項(xiàng)目,在解決方案資源管理器的Models文件夾中右擊,從彈出的快捷菜單中選擇“添加”→“類”命令;或者在菜單欄選擇“項(xiàng)目”→“添加類”命令,打開如圖所示的“添加新項(xiàng)”窗口。(2)在“名稱”文本框中輸入類名稱,例如Customs.cs,單擊“添加”按鈕,在Models文件夾中即可看到創(chuàng)建的類文件,在編輯器中顯示該類的基架,如圖所示。(3)在該類中編輯代碼,例如,定義客戶的基本信息五、注冊(cè)MVC模式的服務(wù)使用MVC設(shè)計(jì)模式,需要在項(xiàng)目的Startup.cs文件中注冊(cè)MVC模式的服務(wù),同時(shí)還需要設(shè)置默認(rèn)啟動(dòng)的控制器。(1)在解決方案資源管理器中雙擊Startup.cs打開文件,在ConfigureServices()方法中添加代碼,將所需的MVC服務(wù)添加到ASP.NETCore的依賴注入容器中(2)在Configure()方法中,默認(rèn)的啟動(dòng)控制器為Home,根據(jù)需要設(shè)置默認(rèn)的啟動(dòng)器和操作方法。項(xiàng)目總結(jié)項(xiàng)目實(shí)戰(zhàn)本實(shí)戰(zhàn)通過MVC模式實(shí)現(xiàn)用戶登錄并顯示登錄信息的功能,幫助讀者進(jìn)一步理解和掌握創(chuàng)建ASP.NETCoreMVC應(yīng)用程序的方法,以及MVC的設(shè)計(jì)模式。(1)啟動(dòng)VisualStudio,單擊“創(chuàng)建新項(xiàng)目”按鈕,選擇項(xiàng)目模板為ASP.NETCoreWeb應(yīng)用(模型-視圖-控制器)。(2)單擊“下一步”按鈕,輸入項(xiàng)目名稱為UserLogin,解決方案名稱為Project05,如圖所示。(3)單擊“下一步”按鈕,設(shè)置目標(biāo)框架為.NETCore3.1(長(zhǎng)期支持),然后單擊“創(chuàng)建”按鈕,基于指定的設(shè)置創(chuàng)建一個(gè)ASP.NETCoreWeb應(yīng)用。(4)選中解決方案資源管理器中的Models文件夾,單擊“項(xiàng)目”→“添加類”菜單命令打開“添加新項(xiàng)”窗口,在“名稱”文本框中輸入模型類名稱User.cs,如圖所示。創(chuàng)建的項(xiàng)目文件結(jié)構(gòu)指定模型類名稱(5)單擊“添加”按鈕,即可在Model文件夾中添加一個(gè)模型類,如圖所示。(6)在User類文件中添加用戶信息(7)右擊Controllers文件夾,從彈出的快捷菜單中選擇“添加”→“控制器”命令,打開“添加已搭建基架的新項(xiàng)”窗口。在中間窗格中選中“MVC控制器-空”,單擊“添加”按鈕,在打開的“添加新項(xiàng)”窗口底部輸入控制器名稱UserController,如圖所示。(8)單擊“添加”按鈕,在解決方案資源管理器中可以看到添加的控制器文件自動(dòng)顯示在Controllers文件夾中,如圖所示。(9)在控制器文件UserController.cs的Index()方法中定義業(yè)務(wù)邏輯處理代碼(10)在UserController.cs文件中右擊Index()方法,從彈出的快捷菜單中選擇“添加視圖”命令,打開“添加已搭建基架的新項(xiàng)”窗口。(11)在彈出的“添加新項(xiàng)”窗口中,視圖文件名稱默認(rèn)與方法名稱相同,保留默認(rèn)名稱Index.cshtml,單擊“添加”按鈕完成操作。(12)在視圖文件Index.cshtml中添加登錄頁面的HTML代碼添加的控制器

創(chuàng)建視圖(13)雙擊打開Startup.cs文件,在ConfigureServices()方法中添加代碼注冊(cè)MVC模式的服務(wù)(14)修改在Configure()方法中添加代碼注冊(cè)MVC模式的服務(wù)(15)單擊工具欄上的“IISExpress”按鈕,或直接按F5鍵運(yùn)行程序,將自動(dòng)打開瀏覽器,顯示如圖所示的登錄界面。(16)在文本框中輸入用戶名和密碼,單擊“登錄”按鈕,即可顯示輸入的用戶名和密碼,如圖所示。項(xiàng)目六

EFCore數(shù)據(jù)訪問與倉儲(chǔ)模式任務(wù)1EFCore數(shù)據(jù)訪問任務(wù)2使用倉儲(chǔ)模式任務(wù)1EFCore數(shù)據(jù)訪問任務(wù)引入小王要在Web應(yīng)用中展示一些商品信息,由于經(jīng)常要更新和查詢,想到了用數(shù)據(jù)庫存儲(chǔ)商品信息。要顯示和查詢特定商品,自然離不開數(shù)據(jù)訪問。他在查閱資料時(shí),看到網(wǎng)友推薦使用EFCore的功能構(gòu)建高性能的數(shù)據(jù)庫訪問。什么是EFCore?EFCore支持哪些數(shù)據(jù)庫?怎樣使用EFCore訪問數(shù)據(jù)庫,完成查詢、添加、刪除和更改的操作呢?知識(shí)準(zhǔn)備一、什么是EFCoreMVC模式提供了一個(gè)描述實(shí)體之間的關(guān)系的Model,也就是實(shí)體模型,用于將數(shù)據(jù)庫中的數(shù)據(jù)呈現(xiàn)到網(wǎng)站的頁面上。實(shí)體數(shù)據(jù)模型中存放的數(shù)據(jù)用于映射數(shù)據(jù)庫表中字段的屬性,從而獲取數(shù)據(jù)庫中的數(shù)據(jù),并對(duì)其進(jìn)行一系列的操作。EFCore全稱為EntityFrameworkCore,是一種輕量化、可擴(kuò)展、開源和跨平臺(tái)的數(shù)據(jù)訪問框架,是微軟推薦的官方數(shù)據(jù)訪問平臺(tái)。該框架主要用于連接、創(chuàng)建、初始化數(shù)據(jù)庫,并通過程序包管理器控制臺(tái)(PackageManagerConsole)工具對(duì)數(shù)據(jù)庫進(jìn)行變更、完成數(shù)據(jù)遷移。EFCore在NuGet上的包的名稱為Microsoft.EntityFrameworkCore,安裝該庫時(shí)需要安裝4個(gè)包:Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Design、Microsoft.EntityFrameworkCore.Tools和一個(gè)數(shù)據(jù)庫引擎(例如Microsoft.EntityFrameworkCore.sqlServer)。這4個(gè)包的詳細(xì)信息如表所示。案例——添加EFCore框架本案例使用NuGet程序包管理器在項(xiàng)目GoodsOrder中添加EFCore框架。(1)啟動(dòng)VisualStudio,單擊“創(chuàng)建新項(xiàng)目”按鈕,項(xiàng)目模板選擇“ASP.NETCoreWeb應(yīng)用(模型-視圖-控制器)”。(2)單擊“下一步”按鈕,在打開的“配置新項(xiàng)目”窗口中設(shè)置項(xiàng)目名稱為GoodsOrder,解決方案名稱為Project06,如圖所示。(3)單擊“下一步”按鈕,設(shè)置目標(biāo)框架為“.NETCore3.1(長(zhǎng)期支持)”,單擊“創(chuàng)建”按鈕,即可基于指定的設(shè)置創(chuàng)建Web項(xiàng)目,并在解決方案資源管理器中顯示自動(dòng)創(chuàng)建的文件結(jié)構(gòu)。(4)在菜單欄選擇“項(xiàng)目”→“管理NuGet程序包”命令,如圖所示,在編輯區(qū)顯示如圖所示的NuGet包管理器窗口。(5)單擊NuGet包管理器窗口左上角的“瀏覽”選項(xiàng)卡,在搜索框中輸入要搜索的包名稱Microsoft.EntityFrameworkCore,然后在搜索框下方的包列表中選中要安裝的包。選擇要安裝的包(6)在右側(cè)窗格的“版本”下拉列表中選擇要安裝的包的版本,例如“5.0.12”,然后單擊“安裝”按鈕。(7)單擊“確定”按鈕繼續(xù)安裝,彈出如圖所示的“授受許可證”對(duì)話框,提示用戶某些程序包要求在安裝前接受其許可證條款?!邦A(yù)覽更改”對(duì)話框“授受許可證”對(duì)話框(8)單擊“我接受”按鈕,開始安裝Microsoft.EntityFrameworkCore包。安裝成功后,在NuGet包管理器窗口中可以看到已安裝的版本,如圖所示。成功安裝程序包的界面安裝成功的程序包(9)在NuGet包管理器窗口中選擇“瀏覽”選項(xiàng)卡,清空NuGet包管理器窗口左上角的搜索框,輸入要安裝的程序包名稱Microsoft.EntityFrameworkCore.Design,選擇要安裝的版本,如圖所示。(10)單擊“安裝”按鈕,彈出“預(yù)覽更改”對(duì)話框,如圖所示。(11)單擊“確定”按鈕,打開“授受許可證”對(duì)話框。單擊“我接受”按鈕開始安裝。安裝成功后的界面如圖所示。(12)按照上面同樣的方法安裝Microsoft.EntityFrameworkCore.Tools和Microsoft.EntityFrameworkCore.SqlServer程序包。成功安裝后的界面如圖所示。程序包安裝成功界面

安裝的程序包二、EFCore支持的數(shù)據(jù)庫EFCore通過使用稱為數(shù)據(jù)庫提供程序的插件庫實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問。EFCore支持許多關(guān)系數(shù)據(jù)庫甚至非關(guān)系數(shù)據(jù)庫,如表所示。三、定義實(shí)體數(shù)據(jù)模型對(duì)于EFCore,使用模型執(zhí)行數(shù)據(jù)訪問。模型由實(shí)體類和表示數(shù)據(jù)庫會(huì)話的上下文對(duì)象構(gòu)成。上下文對(duì)象允許查詢并保存數(shù)據(jù)。EFCore支持以下模型開發(fā)方法:從現(xiàn)有數(shù)據(jù)庫生成模型。對(duì)模型手動(dòng)編碼,使其符合數(shù)據(jù)庫。創(chuàng)建模型后,使用EF遷移從模型創(chuàng)建數(shù)據(jù)庫。模型發(fā)生變化時(shí),遷移可讓數(shù)據(jù)庫不斷演進(jìn)。案例——?jiǎng)?chuàng)建實(shí)體數(shù)據(jù)模型Goods本實(shí)例在項(xiàng)目GoodsOrder中創(chuàng)建一個(gè)有關(guān)商品的實(shí)體數(shù)據(jù)模型。(1)打開創(chuàng)建的項(xiàng)目GoodsOrder,在解決方案資源管理器中右擊Models文件夾,從彈出的快捷菜單中選擇“添加”→“類”命令,設(shè)置類文件名為Goods.cs,如圖所示。(2)單擊“添加”按鈕,即可在Models文件夾中看到創(chuàng)建的類文件。該類表示訂購(gòu)商品的實(shí)體數(shù)據(jù)模型。(3)在類文件Goods.cs中創(chuàng)建商品對(duì)象應(yīng)具備的一些屬性和方法(4)在類Goods中定義商品對(duì)象所具備的一些方法四、創(chuàng)建上下文類安裝數(shù)據(jù)庫引擎后,要訪問數(shù)據(jù)庫,應(yīng)創(chuàng)建一個(gè)與數(shù)據(jù)庫之間的連接器,也就是數(shù)據(jù)庫上下文的類DbContext。DbContext是在應(yīng)用程序代碼中與底層數(shù)據(jù)庫交互的類,作用是管理數(shù)據(jù)庫連接,用于查詢和保存數(shù)據(jù)庫中的數(shù)據(jù),因此該類中通常定義需要映射到數(shù)據(jù)庫的數(shù)據(jù)模型。在應(yīng)用程序中使用DbContext的方法如下:(1)創(chuàng)建一個(gè)派生自DbContext的類,命名為AppDbContext。(2)在項(xiàng)目中新建一個(gè)文件夾Infrastructure,并將AppDbContext存放到該文件夾中。(3)使用using關(guān)鍵字引用命名空間MicroSoft.EntityFrameworkCore,因?yàn)镈bContext類位于該命名空間中。(4)創(chuàng)建一個(gè)DbContextOptions類的實(shí)例,以便DbContext類能夠正常有效地執(zhí)行。(5)使用類DbContextOptions的實(shí)例承載應(yīng)用中的配置信息,例如連接字符串、數(shù)據(jù)庫提供商等信息。(6)使用構(gòu)造函數(shù)傳遞DbContextOptions實(shí)例。(7)使用DbContext中的第二個(gè)重載方法指定使用的配置信息,并將配置信息傳遞到父類DbContext中。案例——?jiǎng)?chuàng)建BloggingContext類本案例創(chuàng)建一個(gè)數(shù)據(jù)庫上下文的類BloggingContext,在類中定義需要映射到數(shù)據(jù)庫中的數(shù)據(jù)模型。(1)啟動(dòng)VisualStudio,基于模板創(chuàng)建一個(gè)ASP.NETCoreWeb應(yīng)用程序BookOrder。(2)單擊“添加”按鈕,即可在Models文件夾中看到創(chuàng)建的類文件(3)修改類文件設(shè)置類文件名稱五、設(shè)置數(shù)據(jù)庫配置信息使用EFCore訪問數(shù)據(jù)庫,首先要設(shè)置數(shù)據(jù)庫配置信息,然后調(diào)用數(shù)據(jù)庫配置信息配置數(shù)據(jù)庫提供程序。大多數(shù)數(shù)據(jù)庫提供程序都需要通過某種形式的連接字符串連接到數(shù)據(jù)庫。ASP.NETCore中的數(shù)據(jù)庫配置信息在appsettings.json文件中進(jìn)行設(shè)置。六、查詢查詢是一組指令,描述要從給定數(shù)據(jù)源(或源)檢索的數(shù)據(jù)以及返回的數(shù)據(jù)應(yīng)具有的形狀和組織。EFCore使用語言集成查詢(LINQ)從數(shù)據(jù)庫檢索實(shí)體類的實(shí)例,通過LINQ可使用C#(或其他.NET語言)編寫強(qiáng)類型查詢。EFCore將LINQ查詢的表示形式傳遞給數(shù)據(jù)庫提供程序,反過來,數(shù)據(jù)庫提供程序?qū)⑵滢D(zhuǎn)換為數(shù)據(jù)庫特定的查詢語言(例如,用于關(guān)系數(shù)據(jù)庫的SQL)。即使結(jié)果中返回的實(shí)體已存在于上下文中,也始終對(duì)數(shù)據(jù)庫執(zhí)行查詢。為便于讀者理解查詢語句,下面簡(jiǎn)要介紹一下LINQ標(biāo)準(zhǔn)查詢的常用操作符。(1)Select:投影操作符,對(duì)單個(gè)序列或集合中的值進(jìn)行投影。(2)SelectMany:該操作符可將多個(gè)from子句組合起來,將每個(gè)對(duì)象的結(jié)果合并成單個(gè)序列。(3)All:限定操作符,確定序列中的所有元素是否都滿足指定條件,返回一個(gè)布爾值。(4)Any:確定序列中是否有元素滿足條件。(5)Contains:確定序列是否包含滿足指定條件的元素。如果有返回true,否則返回false。(6)OrderBy和OrderByDescending:分別按照主要關(guān)鍵字將序列中的元素按照升序和降序排列。(7)ThenBy和ThenByDescending:分別按照次關(guān)鍵字對(duì)序列進(jìn)行升序和降序排列。(8)Reverse:將序列中的元素按照從后到前的順序反轉(zhuǎn)。(9)Where:基于謂詞函數(shù)篩選值。(10)Join:聯(lián)接操作符,類似于T-SQL中的innerjoin,它將兩個(gè)數(shù)據(jù)源相聯(lián)接,根據(jù)兩個(gè)數(shù)據(jù)源中相等的值進(jìn)行匹配。(11)GroupJoin:聯(lián)接兩個(gè)序列,并對(duì)每個(gè)元素的結(jié)果匹配項(xiàng)進(jìn)行分組,常用于返回“主鍵對(duì)象-外鍵對(duì)象集合”形式的查詢,例如“產(chǎn)品類別-此類別下的所有產(chǎn)品”。(12)GroupBy:分組操作符,根據(jù)一個(gè)特定的值將序列

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論