spNet Mvc選擇題-50題,答案在末尾
第3階段
2021級.NET大三階段清考 測試試題
1、關于Asp.NET MVC 目錄結構下列說法正確的是?【多選題】(2分)
A、App_Data存儲本地化的數據庫文件或數據文件。
B、App_Start 包含多個靜態配置類,執行初始化任務。
C、Models放置模型文件。
D、Global.asax:應用程序配置文件。
2、在ASP.NET MVC中,以下關于控制器的說法錯誤的是?(2分)
A、控制器類名必須由Controller結尾
B、控制器類名可以自定義結尾
C、控制器的父類是Controller類
D、控制器至少有一個返回值為ActionResult的public方法
3、關于Asp.NET MVC 模板頁面下列說法正確的是?【多選題】(2分)
A、Asp.NET MVC 模板頁名稱為Site.Master
B、@RenderBody起到占位符作用,而且只能有一個。
C、@RenderSection 是塊占位符,可以有多個。
D、母版頁所在位置為/Views/Shared目錄下,名稱為_Layout.cshtml
4、在ASP.NET MVC中,下列關于ViewData對象說法錯誤的是?(2分)
A、ViewData對象實際上是ControllerBase類中的一個屬性。
B、ViewData對象本身是一個字典結構類型。
C、ViewData屬性中的值在多次請求過程中,會保存所有數據。
D、ViewData只在一次Http請求中有效,下一次請求會清空內容。
5、在ASP.NET MVC中,關于以下代碼,說法錯誤的是?
[HttpPost]
public ActionResult Index(string uname,int? uage){
return View();
}(2分)
A、通過點擊超鏈接會訪問該Action方法。
B、該方法必須是Post請求才可以處理。
C、頁面中表單元素的name值需要和參數名稱對應。
D、int?參數表示可以為int類型,也可以為空類型。
6、在Asp.NET MVC中如何獲取上傳文件保存路徑?(2分)
A、通過File類獲取磁盤路徑。
B、通過Server.MapPath()獲取服務器路徑。
C、通過Directory獲取磁盤目錄。
D、直接使用絕對路徑。
7、在ASP.NET MVC中,默認的模型綁定器獲取綁定數據的途徑有哪些?【多選題】(2分)
A、Request.Form獲取表單提交的值
B、RouteData.Values獲取路由的值。
C、Request.QueryString獲取URL的值。
D、Request.Directory獲取上傳文件
8、在ASP.NET MVC中,下列關于Html輔助方法說法正確的是?【多選題】(2分)
A、Html輔助方法用于輔助產生Html的系統方法。
B、HTML輔助方法能夠幫助產生HTML標簽和內容,提高開發速度避免語法錯誤。
C、框架定義的大多數輔助方法都是擴展方法。
D、輔助方法開發難度較大,不利于代碼開發和維護。
9、在ASP.NET MVC中,對以下代碼生成的HTML代碼,分析正確的是?
@Html.ActionLink("鏈接文字","Upload",new {id=123,page=5})(2分)
A、<a href="/Upload">鏈接文字</a>
B、<a href="/Home/Upload">鏈接文字</a>
C、<a href="/Home/Upload/123?page=5">鏈接文字</a>
D、<a href="/Home/Upload?id=123&page=5">鏈接文字</a>
10、在ASP.NET MVC中,以下對于強類型理解錯誤的是?(2分)
A、強類型即在變量定義時已明確指定其類型,最典型的應用是結合視圖。
B、強類型的使用可以提高開發視圖的效率和準確性。
C、@model關鍵字指定屬性Property的值。
D、Razor視圖可以智能感知,可直接訪問強類型對象的屬性。
11、在ASP.NET MVC中,關于 Ajax.ActionLink方法用法理解錯誤的是?(2分)
A、可以創建一個具有異步行為的超鏈接。
B、ActionLink方法的第一個參數是超鏈接的文本,第二個參數是操作方法的名稱。
C、AjaxOptions對象能夠配置對服務器的異步請求,但無法處理返回的數據。
D、ActionLink方法可以通過設置AjaxOptions對象的屬性值來調整Ajax請求的行為。
12、在ASP.NET MVC中,下列關于 AjaxOptions對象說法正確的是?【多選題】(2分)
A、HttpMethod 獲取或設置HTTP請求方法(“GET”或“POST”)
B、OnComplete 獲取或設置數據響應之后、更新頁面之前,調用的JavaScript函數。
C、OnBegin 獲取或設置更新頁面之前調用的JavaScript函數的名稱。
D、InsertionMode 獲取或設置指定如何將響應結果插入到目標DOM元素的模式。
13、Web API的使用場景有哪些?【多選題】(2分)
A、需要Web Service但是不需要SOAP。
B、只想發布一些簡單的Http服務,不想使用相對復雜的WCF配置。
C、發布的服務可能會被帶寬受限的設備訪問。
D、需要在已有的WCF服務基礎上建立non-soap-based http服務。
14、Asp.NET MVC中Session默認有效期是多長時間?(2分)
A、5分鐘 B、10分鐘
C、20分鐘 D、30分鐘
15、MVC與webform相比有什么優勢?【多選題】(2分)
A、強類型view實現,更安全,更高效。
B、使Web程序對單元測試的支持更加出色
C、沒有服務器表單控件,可以更方便的控制應用程序的行為
D、通過把項目分成Model、View和Controller,使得復雜項目更加容易維護,減少項目之間的耦合。
16、下列哪些屬于MVC過濾器的是?【多選題】(2分)
A、ActionFilter B、ResultFilter
C、AuthorizationFilter D、ExceptionFilter
17、在ASP.NET MVC中,如果想讓視圖顯示為指定中文,要改變哪個屬性的值?(2分)
A、[Display] B、[Required]
C、[StringLength] D、[Range]
18、在ASP.NET MVC中,強類型輔助方法Html.ListBoxFor()
輸出的標簽是?
(2分)
A、輸出<textarea/>標簽
B、輸出<select>標簽
C、輸出<input type="checkbox">標簽
D、輸出<select multiple />標簽
19、在ASP.NET MVC中,Html.DisplayTextFor()的作用是?(2分)
A、根據提供的數據類型生成相應<input>標簽(模板型方法)
B、根據提供的數據類型輸出相應顯示內容(模板型方法)
C、顯示數據模型的文字資料
D、顯示數據模型輸入驗證失敗時的錯誤信息
20、在ASP.NET MVC中,AjaxOptions對象中的InsertionMode
方法作用是?(2分)
A、獲取或設置提交請求之前,顯示在確認窗口中的消息
B、獲取或設置HTTP請求方法(“GET”或“POST”)
C、獲取或設置指定如何將響應結果插入到目標DOM元素的模式
D、獲取或設置加載時要顯示的HTML元素的id屬性值
21、關于HTTP動詞Get下面說法不正確的是?(2分)
A、很安全,因為其只查詢而不修改數據
B、按HTTP/1.1規定,有標頭,也有文本
C、一般用于獲取查詢資源,對應數據庫中的Select操作
D、使用Get動詞獲取URI資源的具像
22、在ASP.NET MVC中,判斷模型綁定的驗證結果,可以通過以下哪個對象進行判斷?:(2分)
A、Model B、State
C、ModelState D、Session
23、在ASP.NET MVC中,以下哪個是jQuery驗證插件?(2分)
A、.validate B、.val
C、.date D、.ajax
24、在ASP.NET MVC中,什么是強類型HTML輔助方法?(2分)
A、通過類表達式來引用傳遞到視圖中的模型對象
B、通過Lambda表達式來引用傳遞到視圖中的模型對象
C、通過數學表達式來引用傳遞到視圖中的模型對象
D、通過文字表達式表達式來引用傳遞到視圖中的模型對象
25、在ASP.NET MVC中,下列模型數據注解中用于驗證屬性值必須匹配正則表達式的API是(???? )。(2分)
A、A. Required
B、B. Range
C、C. RegularExpression
D、D. Compare
26、MVC優點有哪些?【多選題】(2分)
A、A.通過把項目分成model view和controller,使得復雜項目更加容易維護。
B、B.沒有使用view state和服務器表單控件,可以更方便的控制應用程序的行為
C、C.在團隊開發模式下表現更出眾
D、D.應用程序通過controller來控制程序請求,可以提供豐富的url重寫
27、ASP.NET MVC提供過濾器來處理這些需求,支持的過濾器類型有4種,其中()用于限制執行控制器或控制器的某個操作方法(2分)
A、A.Authorization B、B.Exception
C、C.Action D、D.Result
28、關于ASP.NET和ASP.NET MVC的關系,描述錯誤的是()?(2分)
A、A.ASP.NET MVC依賴于HttpHandler,關于請求是怎么進入控制器的,其實就是用到了HttpHandler
B、B.Session、Cookie、Cache和Application這些ASP.NET的對象保存機制在MVC中依然是需要用到的
C、C.HttpContext、Request、Response、Server對象在MVC中仍然可以使用,在Controller中通過智能感知的形式很容易得到這些對象
D、D.ASP.NET 是在核心ASP.NET MVC基礎之上構建的
29、在ASP.NET MVC中,一個視圖是否能在多個controller中分享?(2分)
A、A.不確定。
B、B.不可以
C、C.可以, 把這個視圖放在一個shared的文件夾里面。當我們在創建一個新的mvc工程的時候,這個layout page就會被添加在分享的文件夾里面因為他會被多個子頁面調用。
D、D.有時可以,有時不可以
30、在數據上下文中DbContext中有一個Database屬性,Database屬性中有兩組方法,即( )和( )【多選題】(2分)
A、ExecuteCommand B、ExecuteSqlCommand
C、 SqlQuery D、ExecuteQuery
31、HttpModule中哪個方法在請求處理之前附加信息(2分)
A、Init()
B、Dispose()
C、context_BeginRequest(object sender,EventArgs e)
D、context_EndRequest(object sender,EventArgs e)
32、XMLHttpRequest是()內置對象,開發AJAX前必須創建該對象。(2分)
A、C# B、ASP
C、JavaScript D、Xml
33、下列安裝Vue的方式正確的是(2分)
A、<script href=“js/vue.min.js"></script>
B、<link src=“js/vue.min.js"></ link >
C、< link src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></ link>
D、<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
34、在Vue中,使用語法糖簡化了組件注冊,但是會導致(2分)
A、只能全局注冊組件 B、只能局部注冊組件
C、HTML和JavaScript的解耦 D、HTML和JavaScript的高耦合
35、在Vue中,以下有關子組件正確的是(2分)
A、子組件以子標簽的形式在父組件中使用 B、子組件只能在父組件中使用
C、子組件可以再父組件標簽外使用 D、子組件可以在父組件的每個選項中使用
36、根據選擇的測試策略的不同,可以將軟件測試分為黑盒測試和白盒測試兩種,其中()不屬于黑盒測試方法(2分)
A、條件覆蓋 B、等價類劃分
C、邊界值分析 D、因果圖
37、在Vue中,使用v-bind指令綁定類屬性有兩種語法是【多選題】(2分)
A、對象語法 B、實例語法
C、集合語法 D、數組語法
38、已知:打招呼的委托名為TranslationDelegate,已知打招呼的委托方法void ChineseSayHello(),以下關于實列化委托說法錯誤的是:(2分)
A、TranslationDelegate td = new TranslationDelegate (ChineseSayHello)
B、TranslationDelegate td=ChineseSayHello
C、TranslationDelegate td = TranslationDelegate (ChineseSayHello)
D、以上答案都錯誤
39、在新建的MVC項目的“App_Start\RoutConfig.cs”文件中,( )方法注冊了默認的路由配置。(2分)
A、A.RegisterRoutes B、B.Application_Start
C、C.EnrollRoutes D、D.WriteRoutes
40、在ASP.NET MVC中,模型注解驗證中,驗證數值范圍為10-20,以下正確的是?(2分)
A、A. StringLength(10,20)
B、B. Range(10.20)
C、C. RegularExpression
D、D. Compare("10")
41、MVC優點有哪些?【多選題】(2分)
A、使得復雜項目更加容易維護 B、可以更方便的控制應用程序的行為
C、可以提供豐富的url重寫。 D、在團隊開發模式下表現更出眾
42、在ASP.NET MVC中,定義一個新的路由規則,要修改哪個方法?(2分)
A、RegisterRoutes() B、NewRoutes()
C、CreateRoutes() D、DeafultRoutes()
43、在ASP.NET MVC中,若使用支架模板完成用戶信息管理,以下為編輯用戶視圖的是? (2分)
A、Index.cshtml B、Edit.cshtml
C、Delete.cshtml D、Details.cshtml
44、在ASP.NET MVC中,模型數據注解的命名空間是?(2分)
A、System.ComponentModel.DataAnnotations
B、System.Data.DataAnnotations
C、System.IO.DataAnnotations
D、System.Sql.DataAnnotations
45、關于MVC下列說法錯誤的是____(2分)
A、ASP.NET MVC中View默認放在Views目錄下面,也可以是其他目錄
B、ASP.NET MVC中Model必須放在Models目錄下面
C、ASP.NET MVC中腳本文件必須放在Scripts目錄下面
D、ASP.NET MVC中Controller默認必須放在Controllers目錄下面
46、在ASP.NET MVC中,下列關于Ajax.BeginForm 理解錯誤的是?(2分)
A、Html.BeginForm用于創建普通的表單標簽。
B、Ajax.BeginForm方法創建的是異步表單。
C、提交到當前頁面,提交方式為Post,異步更新模塊ID為UserLogOnContainer 的定義如下:
Ajax.BeginForm( new AjaxOptions{
UpdateTargetId = "UserLogOnContainer",
HttpMethod = "Post",
OnSuccess = " "})
D、提交到指定控制器下的操作方法,提交方式為Post,異步更新模塊ID為UserLogOnContainer,定義如下:
Ajax.BeginForm("controller", "action", null, new AjaxOptions{
UpdateTargetId = "UserLogOnContainer",
HttpMethod = "Post",
OnSuccess = " "})
47、在ASP.NET MVC中,選項中哪個輔助方法可以生成如下代碼?
<select></select>(2分)
A、Html.Select() B、Html.CheckBox()
C、Html.TextBox() D、Html.DropDownList()
48、在ASP.NET MVC中,模型綁定可以獲取哪些基本類型的數據?【多選題】(2分)
A、int B、string
C、double D、float
49、在ASP.NET MVC的控制器中,存在以下代碼:
public ActionResult Index(){
ViewBag.Name = "zhangsan";
TempData["Age"] = 20;
return View();
}
則以下說法正確的是?(2分)
A、Index.cshtml頁面無法獲取到姓名Name信息。
B、Abount.cshtml頁面可以獲取到姓名Name信息。
C、Index.cshtml頁面無法獲取到年齡Age信息。
D、Abount.cshtml頁面可以獲取到年齡Age信息。
50、在ASP.NET MVC中,以下代碼說法錯誤的是?
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);(2分)
A、訪問首頁時,完整路徑為"http://域名/Default/Index"
B、該配置所在文件路徑為:/App_Start/RouteConfig.cs
C、訪問:http://域名/Home/Add時,調用的是Add方法
D、id在url請求過程中可以省略。
答案如下:
SP.NET Core MVC是一個來自微軟的Web應用程序開發框架,它結合了模型-視圖-控制器(MVC)體系結構的有效性和整潔性、敏捷開發的想法和技術,以及.NET平臺的最佳部分。
最早的ASP.NET是在2002年推出的,當時微軟熱衷于保護其在傳統桌面應用程序開發中的主導地位,并將互聯網視為威脅。圖1-1說明了當時出現的ASP.NET Web Forms技術棧。
圖1-1 ASP.NET Web Forms技術棧
微軟試圖使用ASP.NET Web Forms將用戶界面(User Interface,UI)模擬為服務器端控件對象層,隱藏超文本傳輸協議HTTP(本身是無狀態的)和超文本標記語言HTML(當時許多開發人員對此還不熟悉)。每個控件在請求之間保持自己的狀態,在需要時自動渲染為HTML,并將客戶端事件(如按鈕單擊)與服務器端相應的事件處理程序代碼相關聯。實際上,Web窗體是一個巨大的抽象層,旨在通過Web傳遞經典的事件驅動的圖形用戶界面(Graphics User Interface,GUI)。
其思想是使Web開發的體驗與開發桌面應用程序一致。開發人員可以基于有狀態的用戶界面進行考慮,而無須使用一系列獨立的HTTP請求和響應。微軟可以使Windows桌面開發人員向新型Web應用程序開發領域實現無縫轉型。
傳統的ASP.NET Web Forms開發從原則上來說曾經很好,但事實證明它更加復雜。
ASP.NET Web Forms并非一無是處,實際上,微軟為提高標準合規性和簡化開發流程付出了巨大的努力,甚至從原始的ASP.NET MVC框架中獲取了一些功能,并將其應用于ASP.NET Web Forms。當你需要快速的結果時,ASP.NET Web Forms表現優異,你可以在一天內擁有一個相當復雜的Web應用程序。但除非你在開發過程中足夠小心,否則你會發現你創建的應用程序難以測試和維護。
2007年10月,微軟發布了一個基于現有ASP.NET平臺的新開發平臺,旨在直接回應對ASP.NET Web Forms的批評和競爭平臺(如Ruby on Rails)的普及。新平臺稱為ASP.NET MVC框架,并反映了Web應用程序開發的新興趨勢,如HTML和CSS標準化、REST Web服務、有效的單元測試以及開發人員應該接受HTTP的無狀態特性的想法。
支持最初MVC框架的概念現在看起來很自然而且顯而易見,但是它們在2007年的.NET Web開發世界中是缺乏的。ASP.NET MVC框架的引入使微軟的Web開發平臺重新回到了現代。
MVC框架還表明微軟的態度發生了重大變化,微軟以前曾試圖控制Web應用程序工具鏈中的每個組件。現在微軟基于jQuery等開源工具構建了MVC框架,從競爭(并且更為成功的)平臺中獲得了設計約定和最佳實踐,并將源代碼發布到MVC框架,供開發人員審查。
微軟在創建MVC框架時,基于現有的ASP.NET平臺,這是有道理的,因為該平臺具有很多固有的底層特性,ASP.NET開發人員都熟知和理解這些特性。
但是,將MVC框架移植到最初為ASP.NET Web Forms設計的平臺上是需要妥協的。MVC框架開發人員逐漸喜歡使用配置設置和代碼調整,來禁用或重新配置對Web應用程序沒有任何影響但對整個程序正常工作來說必需的特性。
隨著MVC框架的普及,微軟開始將一些核心功能添加到ASP.NET Web Forms中。結果越來越不相匹配,其中需要用來支持MVC框架的獨特設計特性被擴展到支持ASP.NET Web Forms,卻為了讓所有的東西融合在一起而讓設計變得更加不相匹配。同時,微軟開始使用創建Web服務(Web API)和實時通信(SignalR)的新框架來擴展ASP.NET。新的框架添加了自己的配置和開發約定,每個都有自己的優點和特異之處,結果導致了零亂的混亂狀態。
2015年,微軟公布了ASP.NET和MVC框架的新方向,也就是本書要討論的主題ASP.NET Core MVC。
ASP.NET Core基于.NET Core構建,它是.NET Framework的跨平臺版本,沒有Windows平臺特定的應用程序編程接口(Application Programming Interface,API)。雖然Windows仍然是主要的操作系統,但Web應用程序越來越多地托管在云平臺的小型而簡單的容器中,并且通過采用跨平臺方法,微軟擴展了.NET的覆蓋面,使得ASP.NET Core應用程序能夠部署到更廣泛的托管環境中。另外,ASP.NET Core還有一個額外的優點——開發人員可以在Linux系統和macOS上創建ASP.NET Core Web應用程序。
ASP.NET Core是一個全新的框架。它更簡單、更容易處理,并且沒有來自ASP.NET Web Forms的遺留問題。另外,由于它基于.NET Core,因此它支持在一系列平臺和容器上進行Web應用程序開發。
ASP.NET Core MVC提供了基于新的ASP.NET Core平臺構建的初始ASP.NET MVC框架的功能。它集成了以前由Web API提供的功能,能以更自然的方式生成復雜內容,并且使關鍵開發任務(如單元測試)更簡單。
ASP.NET Core MVC 2的發布版本重點關注整合,它在早期版本中引入了一些工具和平臺變更。ASP.NET Core MVC 2需要.NET Core 2,它具有很多擴展的API,現已在其他Linux發行版上受到支持。有用的變化包括一個新的元數據包系統(它簡化了NuGet包的管理),一個新的ASP.NET Core配置系統,以及對Entity Framework Core 2的支持。最重要的新功能是Razor Pages,它嘗試重新構建應用,并使用更現代的平臺創建與Web Pages相關的開發風格,但MVC開發人員對Razor Pages并不感興趣(因而在本書中沒有描述)。
本節將簡要介紹新的MVC平臺如何克服ASP.NET Web Forms和初始MVC框架的遺留問題,以及如何完善ASP.NET。
ASP.NET Core MVC遵循稱為模型-視圖-控制器(MVC)的模式,指導ASP.NET Web應用程序及其包含的組件之間的交互。
區分MVC架構模式和ASP.NET Core MVC實現很重要。MVC模式并不新穎,它可以追溯到1978年Xerox PARC的Smalltalk項目,但是它作為Web應用程序的一種開發模式,已經得到了廣泛普及,原因如下。
ASP.NET Core MVC實現了MVC模式,與ASP.NET Web Forms相比,ASP.NET Core MVC極大改善了關注點的分離。實際上,ASP.NET Core MVC實現了MVC模式的變體,特別適用于Web應用程序。你將在第3章中更多地了解此架構的理論和實踐。
ASP.NET Core和ASP.NET Core MVC已構建為一系列具有明確特征的獨立組件,能滿足.NET接口的需求,也可構建在抽象基類上。你可以輕松地用自己的實現替換關鍵組件。一般來說,ASP.NET Core MVC為每個組件提供了以下3個選項。
你將從第14章開始,了解各種組件、如何替換以及為什么要調整或替換每個組件。
ASP.NET Core MVC能夠生成清晰、符合標準的標簽。它的內置標簽幫助器能產生符合標準的輸出,但與ASP.NET Web Forms相比,有更重要的理念上的變化。ASP.NET Core MVC并不會生成一些難以控制的HTML控件,而是鼓勵你創建簡單而優雅的標簽,并使用CSS進行樣式化。
當然,如果你想要為諸如日期選擇器或級聯菜單之類的復雜UI元素使用一些現成的小部件,那么ASP.NET Core MVC采用的“無特定要求”方法可以很輕松地使用各種最佳組合的客戶端庫,如jQuery、Angular或Bootstrap CSS庫。ASP.NET Core MVC與這些庫相互配合得很好,微軟已包含這些模板以啟動新的開發項目。
ASP.NET Core MVC與HTTP協調工作。你可以控制在瀏覽器和服務器之間傳遞的請求,因此你可以根據需要調整用戶體驗。使用 Ajax 更加容易,創建 Web 服務來接收瀏覽器 HTTP 請求是一個簡單的過程。
ASP.NET Core MVC架構在使應用程序變得可維護和可測試方面提供了良好的開端,因為你可以將不同的應用程序關注點自然地分離成獨立的部分。此外,ASP.NET Core平臺和ASP.NET Core MVC框架的每個部分都可以為單元測試進行隔離和替換,可以使用任何流行的開源測試框架(如xUnit)。
在本書中,你將看到如何為ASP.NET MVC控制器編寫整潔、簡單的單元測試示例。為了模擬各種場景,這些示例使用各種測試和模擬策略來支持框架組件的虛構或模擬實現。即使你以前從來沒有寫過單元測試,這也是一個很好的開始。
可測試性不僅僅是單元測試的問題。ASP.NET Core MVC應用程序也可以與UI自動化測試工具一起使用。你可以編寫模擬用戶交互的測試腳本,而不需要猜測框架將生成哪些HTML元素結構、CSS類或ID,你不必擔心頁面結構發生意外的變化。
統一資源定位器(URL)的風格隨著Web應用技術的發展而發展,比如,以下URL越來越少見。
/App_v2/User/Page.aspx?action=show%20prop&prop_id=82742
取而代之的是一種更簡單、更干凈的格式:
/to-rent/chicago/2303-silver-street
采用這種URL結構有一些很好的理由。第一,搜索引擎會對URL中找到的關鍵字加權。搜索“rent in Chicago”(芝加哥租房)更有可能找到更簡單的網址。第二,許多網絡用戶現在已經足夠了解URL,并樂于通過在瀏覽器的地址欄中鍵入導航選項。第三,當人們理解URL的結構時,才更有可能鏈接它,與朋友分享,甚至通過手機朗讀。第四,它不會向公共Internet暴露你的應用程序的技術細節、文件夾和文件名結構,因此你可以自由地更改底層的實現,而不會破壞所有的傳入鏈接。
整潔的URL在早期的框架中很難實現,但ASP.NET Core MVC默認使用稱為URL路由的功能來提供整潔的URL。這樣可以控制你的URL模式及其與應用程序之間的關系,自由地為用戶創建有意義和有用的URL模式,而無須遵守預定義模式。當然,這意味著你可以輕松地定義一種現代REST風格的URL模式。
微軟的.NET平臺隨每個主版本的發展而發展,支持甚至定義了現代編程的最新方向。ASP.NET Core MVC是為.NET Core構建的,因此其API可以充分利用C#程序員熟悉的語言和運行時創新,包括await關鍵字、擴展方法、lambda表達式、匿名和動態類型以及語言集成查詢(LINQ)。
許多ASP.NET Core MVC API方法和編碼模式與早期平臺相比遵循更整潔、更具表現力的方式。不要擔心,如果你尚不了解最新的C#語言特性,第4章會提供MVC開發中最重要的C#特性總結。
以前的ASP.NET版本特定于Windows系統,需要使用Windows桌面編寫Web應用程序,使用Windows服務器才能部署和運行它們。微軟使ASP.NET Core支持跨平臺,包括開發和部署。ASP.NET Core可用于不同的平臺,包括macOS和一系列流行的Linux發行版??缙脚_支持使得部署ASP.NET Core MVC應用程序變得更加容易,并且可以很好地支持應用程序容器平臺,如Docker等。
當前大多數ASP.NET Core MVC開發很可能會使用Visual Studio完成,但微軟也創建了一個名為Visual Studio Code的跨平臺開發工具,這意味著ASP.NET Core MVC開發不再局限于Windows平臺。
與以前的Microsoft Web開發平臺不同,你可以免費下載ASP.NET Core和ASP.NET Core MVC的源代碼,甚至修改和編譯自己的版本。當你要調試跟蹤進入一個系統組件并希望進入其代碼內部(甚至閱讀原始的程序員注釋)時,這是非常有價值的。如果你正在構建一個高級組件,并希望了解進一步開發的可能性,或想了解內置組件如何進行實際工作,這也是非常有用的。
精通ASP.NET Core MVC 第7版
本書分為兩部分,每一部分都涵蓋了一系列相關主題。
本書第一部分將從ASP.NET Core MVC的背景開始,解釋MVC模式的優點和實際影響,介紹ASP.NET Core MVC的功能,并描述每個ASP.NET Core MVC程序員需要學習的工具和C#語言功能。
在第2章中,你將通過創建一個簡單的Web應用程序,深入了解主要組件、構建塊以及它們如何組合在一起。然而,本書第一部分主要介紹如何開發一個名為SportsStore的項目,通過該項目,展示從開始到部署的實際開發流程,并介紹ASP.NET Core MVC的主要特性。
本書第二部分將解釋用于構建SportsStore應用程序的ASP.NET Core MVC功能的內部工作原理。該部分將展示每個功能如何工作,解釋它所扮演的角色,并展示可用的配置和自定義選項。本書第一部分介紹廣泛的背景基礎,第二部分則深入討論細節。
Adam Freeman是一位經驗豐富的IT專家,曾在一系列公司擔任高級職務,最后的職務是一家全球性銀行的首席技術官(Chief Technology Officer,CTO)和首席運營官(Chief Operating Officer,COO)。退休以后,他喜歡寫作和長跑。
詳細目錄
目 錄
第 一部分 ASP.NET Core MVC
第 1章 ASP.NET Core MVC背景 2
1.1 ASP.NET Core MVC的歷史 2
1.1.1 ASP.NET Web Forms 2
1.1.2 起初的MVC框架 3
1.2 ASP.NET Core 3
1.2.1 ASP.NET Core MVC 2的新特性 4
1.2.2 ASP.NET Core MVC的主要優點 4
1.3 預備知識 6
1.4 本書的結構 6
1.5 如何獲取本書的示例代碼 6
1.6 聯系作者 6
1.7 小結 7
第 2章 首個MVC應用程序 8
2.1 安裝Visual Studio 8
2.2 安裝.NET Core 2.0 SDK 9
2.3 創建新的ASP.NET Core MVC項目 9
2.3.1 添加控制器 11
2.3.2 理解路由 13
2.4 渲染頁面 14
2.4.1 創建并渲染視圖 14
2.4.2 添加動態輸出 16
2.5 創建一個簡單的數據錄入程序 17
2.5.1 設置場景 17
2.5.2 設計數據模型 18
2.5.3 創建第二個操作和強類型視圖 18
2.5.4 鏈接操作方法 19
2.5.5 建立表單 20
2.5.6 接收表單數據 21
2.5.7 顯示響應 25
2.5.8 添加驗證 27
2.5.9 設置內容樣式 31
2.6 小結 35
第3章 MVC模式、項目與約定 36
3.1 MVC簡史 36
3.2 MVC模式 36
3.2.1 模型 36
3.2.2 控制器 37
3.2.3 視圖 37
3.2.4 MVC的ASP.NET實現 37
3.3 MVC與其他模式的比較 38
3.3.1 “智能UI”模式 38
3.3.2 理解模型-視圖架構 39
3.3.3 經典的3層架構 39
3.3.4 MVC的多樣性 40
3.4 ASP.NET Core MVC項目 40
3.4.1 創建項目 41
3.4.2 關于MVC的約定 43
3.5 小結 44
第4章 C#基本特性 45
4.1 準備示例項目 45
4.1.1 啟用ASP.NET Core MVC 46
4.1.2 創建MVC應用程序組件 47
4.2 運用null條件運算符 48
4.2.1 null條件運算符的連接運算 49
4.2.2 聯合使用null條件運算符和
null合并運算符 50
4.3 使用自動實現屬性 51
4.3.1 初始化自動實現屬性 51
4.3.2 創建只讀的自動實現屬性 52
4.4 使用字符串插值 53
4.5 使用對象和集合初始化器 54
4.6 模式匹配 56
4.7 使用擴展方法 58
4.7.1 將擴展方法應用于接口 59
4.7.2 創建過濾擴展方法 60
4.8 使用Lambda表達式 61
4.8.1 定義函數 63
4.8.2 使用Lambda表達式實現方法和
屬性 65
4.9 使用類型推斷和匿名類型 66
4.10 使用異步方法 68
4.10.1 直接使用任務 69
4.10.2 使用async和await關鍵字 70
4.11 獲取名稱 71
4.12 小結 72
第5章 使用Razor 73
5.1 準備示例項目 73
5.1.1 定義模型 74
5.1.2 創建控制器 74
5.1.3 創建視圖 75
5.2 使用模型對象 75
5.3 使用布局 78
5.3.1 創建布局 78
5.3.2 使用布局 80
5.3.3 應用視圖啟動文件 80
5.4 使用Razor表達式 81
5.4.1 插入數據 82
5.4.2 設置屬性值 83
5.4.3 使用條件語句 84
5.4.4 枚舉數組和集合 85
5.5 小結 86
第6章 使用Visual Studio 87
6.1 準備示例項目 87
6.1.1 創建模型 87
6.1.2 創建控制器和視圖 88
6.2 管理軟件包 89
6.2.1 NuGet 89
6.2.2 Bower 91
6.3 迭代開發 93
6.3.1 修改Razor視圖 93
6.3.2 對C#類進行更改 94
6.3.3 使用瀏覽器鏈接 99
6.4 部署JavaScript和CSS 102
6.4.1 啟用靜態內容傳遞 102
6.4.2 為項目添加靜態內容 103
6.4.3 更新視圖 104
6.4.4 MVC應用程序中的打包和
縮小 105
6.5 小結 108
第7章 對MVC應用程序進行
單元測試 109
7.1 準備示例項目 109
7.1.1 啟用內置的標簽助手 109
7.1.2 為控制器添加操作方法 110
7.1.3 創建數據輸入表單 110
7.1.4 更新Index視圖 111
7.2 測試MVC應用程序 112
7.2.1 創建單元測試項目 112
7.2.2 創建項目引用 113
7.2.3 編寫并運行單元測試 115
7.2.4 隔離組件以進行單元測試 116
7.3 改進單元測試 123
7.3.1 參數化單元測試 123
7.3.2 改進假的實現 126
7.4 小結 129
第8章 SportsStore應用程序 130
8.1 準備開始 130
8.1.1 創建MVC項目 130
8.1.2 創建單元測試項目 133
8.1.3 測試和啟動應用程序 134
8.2 開始領域模型開發 134
8.2.1 創建存儲庫 135
8.2.2 創建虛擬存儲庫 135
8.2.3 注冊存儲庫服務 136
8.3 顯示產品清單 137
8.3.1 添加一個控制器 137
8.3.2 添加并配置視圖 138
8.3.3 設置默認路由 139
8.3.4 運行應用程序 140
8.4 準備數據庫 140
8.4.1 安裝Entity Framework Core
工具包 141
8.4.2 創建數據庫類 141
8.4.3 創建存儲庫類 142
8.4.4 定義連接字符串 142
8.4.5 配置應用程序 143
8.4.6 創建數據庫遷移 145
8.4.7 創建種子數據 145
8.5 添加分頁 148
8.5.1 顯示頁面鏈接 149
8.5.2 改進URL 155
8.6 更改內容樣式 157
8.6.1 安裝Bootstrap包 157
8.6.2 將Bootstrap樣式應用于布局 157
8.6.3 創建分部視圖 159
8.7 小結 160
第9章 SportsStore的導航 161
9.1 添加導航控件 161
9.1.1 過濾產品列表 161
9.1.2 優化URL結構 164
9.1.3 構建類別導航菜單 167
9.1.4 更正頁數 172
9.2 構建購物車 174
9.2.1 定義購物車模型 174
9.2.2 添加Add To Cart按鈕 177
9.2.3 啟用會話 179
9.2.4 實現Cart控制器 180
9.2.5 顯示購物車的內容 181
9.3 小結 183
第 10章 完成購物車 184
10.1 使用服務優化購物車模型 184
10.1.1 創建支持存儲感知的Cart類 184
10.1.2 注冊服務 185
10.1.3 簡化Cart控制器 185
10.2 完成購物車功能 186
10.2.1 從購物車中刪除商品 186
10.2.2 添加購物車摘要小部件 188
10.3 提交訂單 190
10.3.1 創建模型類 190
10.3.2 添加結賬流程 191
10.3.3 實現訂單處理 193
10.3.4 完成Order控制器 195
10.3.5 顯示驗證錯誤 198
10.3.6 顯示摘要頁面 199
10.4 小結 199
第 11章 SportsStore的管理 200
11.1 管理訂單 200
11.1.1 增強模型 200
11.1.2 添加操作方法和視圖 201
11.2 添加目錄管理 203
11.2.1 創建CRUD控制器 203
11.2.2 實現列表視圖 205
11.2.3 編輯商品 206
11.2.4 創建新的商品 216
11.2.5 刪除商品 217
11.3 小結 220
第 12章 SportsStore的安全和部署 221
12.1 保護管理功能 221
12.1.1 創建身份標識數據庫 221
12.1.2 應用基本授權策略 224
12.1.3 創建賬戶控制器和視圖 226
12.1.4 測試安全策略 229
12.2 部署應用程序 229
12.2.1 創建數據庫 230
12.2.2 準備應用程序 231
12.2.3 應用數據庫遷移 234
12.2.4 管理數據庫填充 234
12.2.5 部署應用程序 237
12.3 小結 239
第 13章 使用Visual Studio Code 240
13.1 設置開發環境 240
13.1.1 安裝Node.js 240
13.1.2 檢查Node.js安裝狀態 241
13.1.3 安裝Git 241
13.1.4 檢查Git安裝狀態 241
13.1.5 安裝Bower 241
13.1.6 安裝.NET Core 242
13.1.7 檢查.NET Core安裝狀態 242
13.1.8 安裝Visual Studio Code 242
13.1.9 檢查Visual Studio Code安裝
狀態 243
13.1.10 安裝Visual Studio Code的
C#擴展 243
13.2 創建ASP.NET Code項目 244
13.3 使用Visual Studio Code準備項目 244
13.3.1 管理客戶端軟件包 245
13.3.2 配置應用程序 246
13.3.3 構建和運行項目 246
13.4 重新創建PartyInvites應用程序 246
13.4.1 創建模型和存儲庫 247
13.4.2 創建數據庫 249
13.4.3 創建控制器和視圖 250
13.5 Visual Studio Code中的單元測試 254
13.5.1 創建單元測試 254
13.5.2 運行測試 255
13.6 小結 255
第二部分 ASP.NET Core MVC詳解
第 14章 配置應用程序 257
14.1 準備示例項目 257
14.2 配置項目 259
14.2.1 將包添加到項目中 259
14.2.2 將工具包添加到項目中 261
14.3 理解Program類 261
14.4 了解Startup類 264
14.4.1 了解ASP.NET服務 266
14.4.2 了解ASP.NET中間件 268
14.4.3 了解如何調用Configure方法 275
14.4.4 添加其他中間件 278
14.5 配置應用程序 281
14.5.1 創建JSON配置文件 283
14.5.2 使用配置數據 284
14.5.3 配置日志記錄 285
14.5.4 配置依賴注入 288
14.6 配置MVC服務 289
14.7 處理復雜配置 290
14.7.1 創建不同的外部配置文件 290
14.7.2 創建不同的配置方法 292
14.7.3 創建不同的配置類 293
14.8 小結 294
第 15章 URL路由 295
15.1 準備示例項目 295
15.1.1 創建模型類 296
15.1.2 創建Example控制器 296
15.1.3 創建視圖 298
15.2 介紹URL模式 299
15.3 創建和注冊簡單路由 299
15.4 定義默認值 300
15.5 使用靜態URL片段 303
15.6 定義自定義片段變量 306
15.6.1 使用自定義片段變量作為
操作方法的參數 308
15.6.2 定義可選的URL片段 309
15.6.3 定義可變長度路由 311
15.7 約束路由 312
15.7.1 使用正則表達式約束路由 314
15.7.2 使用類型和值約束 316
15.7.3 組合約束 316
15.7.4 定義自定義約束 318
15.8 使用特性路由 320
15.8.1 準備特性路由 320
15.8.2 應用特性路由 321
15.8.3 應用路由約束 323
15.9 小結 323
第 16章 高級路由特性 324
16.1 準備示例項目 324
16.2 在視圖中生成傳出的URL 325
16.2.1 創建傳出的鏈接 326
16.2.2 創建非鏈接的URL 333
16.3 自定義路由系統 334
16.3.1 更改路由系統配置 335
16.3.2 創建自定義路由類 336
16.4 使用區域 344
16.4.1 創建區域 344
16.4.2 創建區域路由 345
16.4.3 填充區域 346
16.4.4 生成區域中指向操作的鏈接 347
16.5 URL模式最佳實踐 348
16.5.1 保持URL的整潔性 348
16.5.2 GET方法和POST方法:
選擇最合適的方法 349
16.6 小結 349
第 17章 控制器和操作 350
17.1 準備示例項目 350
17.2 理解控制器 353
17.3 創建控制器 353
17.3.1 創建POCO控制器 353
17.3.2 使用控制器基類 355
17.4 接收上下文數據 355
17.4.1 從Context對象中接收數據 356
17.4.2 使用操作方法參數 359
17.5 生成響應 360
17.5.1 使用Context對象生成響應 360
17.5.2 理解操作結果 361
17.5.3 生成HTML響應 362
17.5.4 執行重定向 369
17.5.5 返回不同類型的內容 374
17.5.6 響應文件的內容 376
17.5.7 返回錯誤和HTTP狀態碼 377
17.5.8 理解其他操作結果類 378
17.6 小結 378
第 18章 依賴注入 379
18.1 準備示例項目 379
18.1.1 創建模型和存儲庫 380
18.1.2 創建控制器和視圖 381
18.1.3 創建單元測試項目 383
18.2 創建松散耦合的組件 383
18.3 ASP.NET的依賴注入 387
18.3.1 準備依賴注入 388
18.3.2 配置服務提供者 389
18.3.3 對具有依賴項的控制器進行
單元測試 390
18.3.4 使用依賴關系鏈 390
18.3.5 對具體類型使用依賴注入 393
18.4 服務的生命周期 394
18.4.1 使用瞬態生命周期 395
18.4.2 使用作用域的生命周期 398
18.4.3 使用單例生命周期 399
18.5 使用操作注入 400
18.6 使用屬性注入特性 401
18.7 手動請求實現對象 401
18.8 小結 402
第 19章 過濾器 403
19.1 準備示例項目 403
19.1.1 啟用SSL 404
19.1.2 創建控制器和視圖 404
19.2 使用過濾器 405
19.3 實現過濾器 408
19.4 使用授權過濾器 409
19.5 使用操作過濾器 412
19.5.1 創建操作過濾器 412
19.5.2 創建異步操作過濾器 414
19.6 使用結果過濾器 414
19.6.1 創建結果過濾器 415
19.6.2 創建異步結果過濾器 416
19.6.3 創建混合操作/結果過濾器 417
19.7 使用異常過濾器 419
19.8 為過濾器使用依賴注入 421
19.8.1 解決過濾器依賴項 421
19.8.2 管理過濾器的生命周期 424
19.9 創建全局過濾器 426
19.10 理解和更改過濾器的執行順序 428
19.11 小結 430
第 20章 API控制器 431
20.1 準備示例項目 431
20.1.1 創建模型和存儲庫 431
20.1.2 創建控制器和視圖 433
20.2 REST控制器的作用 435
20.2.1 速度問題 435
20.2.2 效率問題 436
20.2.3 開放性問題 436
20.3 REST和API控制器 436
20.3.1 創建API控制器 437
20.3.2 測試API控制器 440
20.3.3 在瀏覽器中使用API控制器 443
20.4 內容格式 445
20.4.1 默認內容策略 445
20.4.2 內容協商 446
20.4.3 指定action數據格式 448
20.4.4 從路由或查詢字符串獲取
數據格式 449
20.4.5 啟用完成內容協商 450
20.4.6 接收不同的數據格式 451
20.5 小結 452
第 21章 視圖 453
21.1 準備示例項目 453
21.2 創建自定義視圖引擎 454
21.2.1 創建自定義IView 456
21.2.2 創建IViewEngine實現 456
21.2.3 注冊自定義視圖引擎 457
21.2.4 測試視圖引擎 458
21.3 使用Razor引擎 459
21.3.1 準備示例項目 459
21.3.2 Razor視圖 461
21.4 將動態內容添加到Razor視圖中 463
21.4.1 使用布局部分 464
21.4.2 使用分部視圖 468
21.4.3 將JSON內容添加到視圖中 469
21.5 配置Razor 471
21.6 小結 475
第 22章 視圖組件 476
22.1 準備示例項目 476
22.1.1 創建模型和存儲庫 476
22.1.2 創建控制器和視圖 478
22.1.3 配置應用程序 480
22.2 視圖組件 481
22.3 創建視圖組件 481
22.3.1 創建POCO視圖組件 482
22.3.2 從ViewComponent基類派生 483
22.3.3 視圖組件結果 484
22.3.4 獲取上下文數據 487
22.3.5 創建異步視圖組件 491
22.4 創建混合的控制器/視圖組件類 493
22.4.1 創建混合視圖 493
22.4.2 應用混合類 495
22.5 小結 495
第 23章 標簽助手 496
23.1 準備示例項目 496
23.1.1 創建模型和存儲庫 496
23.1.2 創建控制器、布局與視圖 497
23.1.3 配置應用程序 499
23.2 創建標簽助手 500
23.2.1 定義標簽助手類 501
23.2.2 注冊標簽助手 503
23.2.3 使用標簽助手 503
23.2.4 管理標簽助手的作用域 505
23.3 高級標簽助手特性 508
23.3.1 創建縮寫元素 508
23.3.2 前置和追加內容與元素 510
23.3.3 使用依賴注入獲取視圖
上下文數據 512
23.3.4 使用視圖模型 514
23.3.5 協調標簽助手 516
23.3.6 抑制輸出元素 517
23.4 小結 518
第 24章 使用表單標簽助手 519
24.1 準備示例項目 519
24.2 使用form元素 521
24.2.1 設置form目標 521
24.2.2 使用防偽特性 522
24.3 使用input元素 524
24.3.1 配置input元素 524
24.3.2 格式化數據 526
24.4 使用label元素 528
24.5 使用select和option元素 529
24.5.1 使用數據源填充select元素 530
24.5.2 從枚舉中生成option元素 531
24.6 使用textarea元素 535
24.7 驗證表單標簽助手 536
24.8 小結 536
第 25章 使用其他內置標簽助手 537
25.1 準備示例項目 537
25.2 使用宿主環境標簽助手 538
25.3 使用JavaScript和CSS標簽助手 539
25.3.1 管理JavaScript文件 539
25.3.2 管理CSS樣式表 545
25.4 使用超鏈接元素 547
25.5 使用圖像元素 548
25.6 使用數據緩存 549
25.6.1 設置緩存過期時間 551
25.6.2 使用緩存變體 552
25.7 小結 555
第 26章 模型綁定 556
26.1 準備示例項目 556
26.1.1 創建模型和存儲庫 556
26.1.2 創建控制器和視圖 558
26.1.3 配置應用 559
26.2 理解模型綁定 560
26.2.1 默認綁定值 561
26.2.2 綁定簡單值 562
26.2.3 綁定復雜類型 562
26.2.4 綁定數組和集合 570
26.3 指定模型綁定源 575
26.3.1 選擇標準綁定源 576
26.3.2 使用請求頭作為綁定源 577
26.3.3 使用請求體作為綁定源 579
26.4 小結 581
第 27章 模型驗證 582
27.1 準備示例項目 582
27.1.1 創建模型 583
27.1.2 創建控制器 583
27.1.3 創建布局和視圖 584
27.2 理解模型驗證的需求 586
27.3 顯式地驗證模型 586
27.3.1 為用戶顯示驗證錯誤消息 588
27.3.2 顯示驗證消息 589
27.3.3 顯示屬性級驗證消息 592
27.3.4 顯示模型級驗證消息 593
27.4 使用元數據指定驗證規則 595
27.5 執行客戶端驗證 599
27.6 執行遠程驗證 601
27.7 小結 603
第 28章 ASP.NET Core Identity
入門 604
28.1 準備示例項目 604
28.2 設置ASP.NET Core Identity 607
28.2.1 創建用戶類 607
28.2.2 創建數據庫上下文類 608
28.2.3 配置數據庫連接串 608
28.2.4 創建ASP.NET Core Identity
數據庫 610
28.3 使用ASP.NET Core Identity 610
28.3.1 列舉用戶賬戶 610
28.3.2 創建用戶 612
28.3.3 驗證密碼 615
28.3.4 驗證用戶詳情 620
28.4 完成管理功能 624
28.4.1 實現刪除功能 625
28.4.2 實現編輯功能 626
28.5 小結 629
第 29章 應用ASP.NET Core
Identity 630
29.1 準備示例項目 630
29.2 驗證用戶 630
29.2.1 準備實現驗證 632
29.2.2 添加用戶驗證 634
29.2.3 測試驗證 636
29.3 使用角色授權用戶 636
29.3.1 創建與刪除角色 637
29.3.2 管理角色成員 641
29.3.3 使用角色進行授權 644
29.4 播種數據庫 647
29.5 小結 650
第30章 ASP.NET Core Identity
進階 651
30.1 準備示例項目 651
30.2 添加自定義用戶屬性 652
30.2.1 準備數據庫遷移 654
30.2.2 測試自定義屬性 655
30.3 使用聲明和策略 655
30.3.1 聲明 656
30.3.2 創建聲明 659
30.3.3 使用策略 661
30.3.4 使用策略對資源授權訪問 666
30.4 使用第三方驗證 670
30.4.1 注冊Google應用 670
30.4.2 啟用Google驗證 671
30.5 小結 674
第31章 模型約定與操作約束 675
31.1 準備示例項目 675
31.2 使用應用程序模型和模型約定 677
31.2.1 理解應用程序模型 678
31.2.2 理解模型約定角色 680
31.2.3 創建模型約定 680
31.2.4 理解模型約定的執行順序 684
31.2.5 創建全局模型約定 685
31.3 使用操作約束 686
31.3.1 準備示例項目 687
31.3.2 操作約束的作用 688
31.3.3 創建操作約束 689
31.3.4 在操作約束中處理依賴 692
31.4 小結 694
VC(Model-View-Controller)是一種軟件設計模式,特別適用于Web應用程序開發。
它通過將應用程序的邏輯劃分為三個核心組件來簡化應用程序的設計和維護:
在C#中,ASP.NET MVC框架就是一個實現MVC設計模式的例子。它提供了一個清晰的結構來構建Web應用程序,使得開發人員能夠專注于各自的職責,提高代碼的可讀性和可維護性。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。