![]() ![]() |
深入淺出:ASP.NET Core 讀者對(duì)象:本書(shū)適用于廣大高校、培訓(xùn)機(jī)構(gòu).NET課程相關(guān)的教材, 或.NET愛(ài)好者的自用參考書(shū)。對(duì)于想通過(guò)自學(xué)步入編程大門(mén)的讀者, 也推薦閱讀本書(shū) ![]() 這是一本面向ASP.NET Core新手的基礎(chǔ)教程,學(xué)用相長(zhǎng),注重實(shí)踐。每個(gè)關(guān)鍵知識(shí)點(diǎn)都配有簡(jiǎn)單的示例,以輔助理解。本書(shū)內(nèi)容涉及ASP.NET Core應(yīng)用程序的初始化、配置,服務(wù)容器與依賴(lài)注入的使用,HTTP/中間件管道的構(gòu)建,HTTP會(huì)話(huà)狀態(tài)的維護(hù),Razor頁(yè)面與MVC,Web API,Blazor,靜態(tài)文件的訪問(wèn),以及安全與授權(quán)。 ASP.NET Core是建立在.NET基礎(chǔ)上的Web開(kāi)發(fā)技術(shù),經(jīng)過(guò)幾個(gè)版本的迭代,已趨于完善。隨著B(niǎo)lazor的不斷優(yōu)化,ASP.NET Core能同時(shí)勝任Web前端與后端的開(kāi)發(fā),最終可生成高性能且跨平臺(tái)的Web應(yīng)用程序。本書(shū)秉持學(xué)以致用的理念,內(nèi)容精練,通俗易懂,以實(shí)例的方式闡述知識(shí)。讀者可以參考書(shū)中實(shí)例動(dòng)手實(shí)踐,提高學(xué)習(xí)效果。本書(shū)主要內(nèi)容包括: ASP.NET Core由微軟官方推出,開(kāi)放源代碼并以社區(qū)為主,可以生成運(yùn)行于Windows、macOS、Linux等操作系統(tǒng)的新型Web應(yīng)用程序。ASP.NET Core并不是ASP.NET的延續(xù)版本,而是經(jīng)過(guò)重新設(shè)計(jì)和優(yōu)化的框架。由于它是編譯運(yùn)行的,因此在性能上的優(yōu)勢(shì)明顯。而且,其內(nèi)部對(duì)異步任務(wù)和安全性做了大量集成工作,有些安全功能是默認(rèn)啟用的,如對(duì)跨站漏洞攻擊的防范。經(jīng)過(guò)六七個(gè)版本的迭代,ASP.NET Core已趨向完善,對(duì)Web前端與其他數(shù)據(jù)訪問(wèn)技術(shù)的兼容性也得到極大提升。對(duì)于常規(guī)Web功能、微服務(wù)、移動(dòng)后端以及物聯(lián)網(wǎng)后端等應(yīng)用場(chǎng)景,ASP.NET Core都是不錯(cuò)的選擇。 本書(shū)所涉及的內(nèi)容針對(duì)性強(qiáng),只要讀者具備.NET或C#編程相關(guān)基礎(chǔ),即可通過(guò)本書(shū)快速掌握ASP.NET Core的關(guān)鍵技術(shù)。本書(shū)在每個(gè)知識(shí)點(diǎn)的講解后都會(huì)附上專(zhuān)門(mén)的示例,方便讀者將學(xué)到的知識(shí)馬上付諸實(shí)踐,加深印象。 ASP.NET Core配有官方開(kāi)發(fā)工具,并共享.NET SDK工具。無(wú)論讀者使用的是Windows還是Linux操作系統(tǒng),都可以執(zhí)行dotnet new命令創(chuàng)建ASP.NET Core應(yīng)用項(xiàng)目,或執(zhí)行dotnet run命令運(yùn)行應(yīng)用程序。 本書(shū)推薦使用官方提供的工具編寫(xiě)代碼。 Visual Studio:Windows、macOS用戶(hù)均可以使用,簡(jiǎn)稱(chēng)VS。VS是著名的集成開(kāi)發(fā)環(huán)境,提供從編碼、校驗(yàn)、生成到調(diào)試和運(yùn)行的完整支持。除了代碼提示功能,還有聯(lián)想功能,可以根據(jù)代碼上下文以及大數(shù)據(jù)匯總推斷各種代碼片段,極大地提高編碼效率。 Visual Studio Code:簡(jiǎn)稱(chēng)VS Code或VSC。VS Code是VS的一個(gè)分支版本,著重代碼編輯功能。VS Code通過(guò)安裝擴(kuò)展支持各種編程語(yǔ)言。理論上,只要擁有足夠的擴(kuò)展,VS Code就能編寫(xiě)任何程序語(yǔ)言的代碼(如C、C 、Python、C#、Java等)。VS Code能運(yùn)行在Windows、Linux及macOS等操作系統(tǒng)上,同時(shí)也支持ARM架構(gòu),如Raspberry Pi OS。使用時(shí)先執(zhí)行dotnet new命令創(chuàng)建ASP.NET Core項(xiàng)目,然后在VS Code中打開(kāi)項(xiàng)目所在目錄即可。 雖然ASP.NET Core可以細(xì)分出Razor Pages、MVC、Web API、Blazor等項(xiàng)目,但實(shí)際上這些功能是可以在同一個(gè)項(xiàng)目中實(shí)現(xiàn)的。ASP.NET Core以服務(wù)容器為核心,可以組件化擴(kuò)展。只要向容器注冊(cè)服務(wù)類(lèi)型,就能開(kāi)啟相關(guān)的功能,如MVC與Blazor功能可以同時(shí)啟用(URL路由不能有沖突)。 本書(shū)適合有一定.NET或C#基礎(chǔ)的讀者閱讀,也可以作為高等學(xué);蚺嘤(xùn)機(jī)構(gòu)的輔助教材。也歡迎想了解ASP.NET Core的開(kāi)發(fā)人員閱讀本書(shū)。 由于編者水平有限,書(shū)中難免出現(xiàn)不妥之處,望廣大讀者不吝批評(píng)指正。 編 者 2024年3月 周家安:微軟最有價(jià)值專(zhuān)家(MVP),擅長(zhǎng).NET及其相關(guān)開(kāi)發(fā)技術(shù),專(zhuān)注于探索簡(jiǎn)單實(shí)用的編程學(xué)習(xí)方法。長(zhǎng)期在博客園等技術(shù)社區(qū)分享編程經(jīng)驗(yàn)。曾出版《Go語(yǔ)言入門(mén)經(jīng)典》《精通C# 5.0》《C#碼農(nóng)筆記從第一行代碼到項(xiàng)目實(shí)戰(zhàn)》《Python實(shí)戰(zhàn)指南手把手教你掌握300個(gè)精彩案例》等優(yōu)秀原創(chuàng)科技圖書(shū)。 第1章 初始化ASP.NET Core應(yīng)用程序 1 1.1 應(yīng)用程序的啟動(dòng)過(guò)程 1 1.2 WebApplicationBuilder類(lèi) 2 1.3 啟動(dòng)應(yīng)用程序 3 1.4 使用Host初始化應(yīng)用程序 4 1.4.1 通用主機(jī) 5 1.4.2 示例:簡(jiǎn)單的通用主機(jī) 5 1.4.3 Web主機(jī) 7 1.5 設(shè)置應(yīng)用程序的URL 9 1.5.1 調(diào)用UseUrls()方法 9 1.5.2 使用WebApplication類(lèi)的Urls屬性 10 1.5.3 調(diào)用Run()方法時(shí)傳遞URL 10 1.5.4 通過(guò)ServerAddressesFeature對(duì)象設(shè)置URL 11 1.5.5 使用命令行參數(shù) 12 1.5.6 使用配置文件 13 1.5.7 使用環(huán)境變量 13 1.5.8 使用launchSettings.json文件 14 1.5.9 Kestrel服務(wù)器的偵聽(tīng)地址 14 1.5.10 通過(guò)HTTP.sys配置URL 15 1.5.11 PreferHostingUrls()方法的作用 15 1.6 應(yīng)用程序生命周期事件 16 第2章 運(yùn)行環(huán)境 18 2.1 定義運(yùn)行環(huán)境 18 2.2 Is{EnvironmentName}擴(kuò)展方法 19 2.3 多運(yùn)行環(huán)境下的配置文件 21 2.4 用于環(huán)境篩選的Razor標(biāo)記 23 2.5 運(yùn)行環(huán)境與依賴(lài)注入 25 第3章 依賴(lài)注入 28 3.1 依賴(lài)注入與服務(wù)容器 28 3.1.1 ServiceCollection類(lèi) 31 3.1.2 ServiceProvider類(lèi) 32 3.2 .NET項(xiàng)目中的依賴(lài)注入 32 3.3 ASP.NET Core項(xiàng)目中的依賴(lài)注入 33 3.4 構(gòu)建存在依賴(lài)關(guān)系的服務(wù) 35 3.5 服務(wù)的生存期 38 3.6 GetService()方法與GetRequiredService()方法的區(qū)別 41 3.7 注入多個(gè)服務(wù)實(shí)例 42 3.8 容易被忽略的問(wèn)題 46 第4章 配置應(yīng)用程序 48 4.1 配置的基本結(jié)構(gòu) 48 4.2 在.NET應(yīng)用程序中使用配置 49 4.3 在ASP.NET Core應(yīng)用程序中使用配置 51 4.3.1 配置的數(shù)據(jù)來(lái)源 51 4.3.2 查看所有配置信息 51 4.4 IConfigurationBuilder接口 52 4.5 ConfigurationManager類(lèi) 53 4.6 IConfigurationSource接口與IConfigurationProvider接口 54 4.6.1 自定義擴(kuò)展點(diǎn) 55 4.6.2 示例:來(lái)自CSV文件的配置 56 4.7 JSON配置 59 4.7.1 示例:訪問(wèn)JSON數(shù)組對(duì)象 62 4.7.2 示例:自動(dòng)重新加載配置 63 4.8 XML配置 64 4.9 環(huán)境變量 67 4.9.1 設(shè)置環(huán)境變量前綴 68 4.9.2 替換默認(rèn)的ASPNETCORE_前綴 70 4.9.3 示例:替換環(huán)境變量前綴 70 4.9.4 分層配置結(jié)構(gòu) 71 4.10 命令行參數(shù) 72 4.11 ini配置 75 4.12 配置與依賴(lài)注入 78 4.12.1 示例:將IConfiguration注入MVC控制器 78 4.12.2 示例:通過(guò)配置選擇哈希算法 79 4.13 鏈接多棵配置樹(shù) 82 第5章 選項(xiàng)模式 85 5.1 選項(xiàng)模式概述 85 5.2 服務(wù)容器的擴(kuò)展方法 87 5.3 各接口之間的關(guān)系 87 5.3.1 IConfigureOptions 5.3.2 IPostConfigureOptions 5.3.3 IValidateOptions 5.3.4 IOptionsFactory 5.3.5 完整的流程圖 90 5.4 選項(xiàng)類(lèi)的封裝接口 91 5.4.1 示例:在MVC控制器中訪問(wèn)選項(xiàng)類(lèi) 92 5.4.2 示例:自動(dòng)更新選項(xiàng)類(lèi) 93 5.5 帶名稱(chēng)的選項(xiàng)組 95 5.6 后期配置 98 5.7 選項(xiàng)類(lèi)的驗(yàn)證 99 5.7.1 內(nèi)置的驗(yàn)證方式 100 5.7.2 使用數(shù)據(jù)批注 102 5.8 處理帶參數(shù)的構(gòu)造函數(shù) 105 5.9 直接實(shí)現(xiàn)IOptions接口 108 第6章 HTTP管道 110 6.1 HTTP管道與中間件 110 6.2 中間件的實(shí)現(xiàn)方法 110 6.3 通過(guò)委托實(shí)現(xiàn)中間件 111 6.3.1 示例:Use()方法的簡(jiǎn)單用法 114 6.3.2 HTTP管道的短路 115 6.3.3 Run()方法 116 6.4 通過(guò)類(lèi)實(shí)現(xiàn)中間件 117 6.4.1 帶參數(shù)的中間件 118 6.4.2 中間件類(lèi)與依賴(lài)注入 119 6.5 通過(guò)IMiddleware接口實(shí)現(xiàn)中間件 120 6.6 終結(jié)點(diǎn) 121 6.6.1 示例:常見(jiàn)的HTTP請(qǐng)求方式 123 6.6.2 示例:同時(shí)使用Razor Pages和MVC 125 6.6.3 為終結(jié)點(diǎn)分配名稱(chēng) 127 6.6.4 元數(shù)據(jù) 129 6.7 有條件地執(zhí)行中間件 130 6.7.1 示例:調(diào)用包含user_id字段的中間件 131 6.7.2 示例:只允許以POST方式調(diào)用Web API 132 第7章 HTTP狀態(tài)存儲(chǔ) 135 7.1 HTTP上下文 135 7.1.1 示例:在中間件中設(shè)置響應(yīng)標(biāo)頭 136 7.1.2 示例:在Map*()方法中訪問(wèn)HTTP上下文 137 7.1.3 示例:使用Razor標(biāo)記呈現(xiàn)HTTP請(qǐng)求標(biāo)頭 138 7.1.4 示例:在MVC中訪問(wèn)HTTP上下文 140 7.2 HTTP消息頭 141 7.2.1 HeaderNames類(lèi) 143 7.2.2 消息頭的分類(lèi) 144 7.2.3 分析復(fù)雜消息頭 145 7.3 查詢(xún)字符串 148 7.3.1 讀取查詢(xún)參數(shù) 149 7.3.2 多值參數(shù) 150 7.4 表單數(shù)據(jù) 151 7.4.1 讀取簡(jiǎn)單的表單數(shù)據(jù) 151 7.4.2 文件上傳 153 7.5 Cookie 157 7.6 HttpContext類(lèi)的Items屬性 159 7.7 會(huì)話(huà) 160 7.7.1 ISession接口 161 7.7.2 設(shè)置會(huì)話(huà)Cookie的名稱(chēng) 164 7.7.3 示例:將會(huì)話(huà)數(shù)據(jù)存儲(chǔ)到JSON文件中 164 第8章 Razor頁(yè)面 172 8.1 Razor頁(yè)面的特點(diǎn) 172 8.2 Razor語(yǔ)法 173 8.2.1 兩種表達(dá)式 173 8.2.2 代碼塊 174 8.2.3 注釋 175 8.2.4 流程控制 176 8.3 開(kāi)啟Razor頁(yè)面功能 177 8.4 Razor頁(yè)面文件 178 8.5 頁(yè)面文件的搜索路徑 179 8.5.1 配置RazorPagesOptions選項(xiàng)類(lèi) 180 8.5.2 便捷的擴(kuò)展方法 180 8.6 頁(yè)面路由 181 8.6.1 通過(guò)@page指令設(shè)置路由規(guī)則 181 8.6.2 通過(guò)約定模型定義路由規(guī)則 182 8.7 頁(yè)面模型類(lèi) 184 8.7.1 頁(yè)面自身作為模型類(lèi) 185 8.7.2 從PageModel派生類(lèi) 185 8.7.3 通過(guò)特性類(lèi)實(shí)現(xiàn)頁(yè)面模型類(lèi) 186 8.8 頁(yè)面處理程序 187 8.8.1 通用的處理程序 188 8.8.2 解決POST請(qǐng)求時(shí)出現(xiàn)的錯(cuò)誤 189 8.8.3 使用多個(gè)處理程序 190 8.8.4 通過(guò)路由參數(shù)選擇處理程序 192 8.8.5 自定義的處理程序模型 193 第9章 MVC框架 199 9.1 MVC基本概念 199 9.2 啟用MVC功能 199 9.3 控制器 200 9.3.1 示例:從ControllerBase類(lèi)派生 203 9.3.2 示例:從Controller類(lèi)派生 205 9.3.3 示例:使用ControllerAttribute 205 9.3.4 示例:使用Controller后綴 206 9.3.5 自定義控制器的名稱(chēng) 207 9.3.6 示例:ControllerNameAttribute類(lèi) 207 9.3.7 自定義操作方法的名稱(chēng) 208 9.3.8 示例:CustActionNameAttribute類(lèi) 208 9.3.9 示例:ActionNameAttribute類(lèi) 209 9.4 MVC路由規(guī)則 210 9.4.1 全局路由規(guī)則 211 9.4.2 示例:注冊(cè)兩條全局路由規(guī)則 211 9.4.3 局部路由規(guī)則 212 9.4.4 IRouteTemplateProvider接口 213 9.4.5 通過(guò)實(shí)現(xiàn)約定接口定義路由規(guī)則 214 9.4.6 示例:CustPrefixRouteConvention類(lèi) 215 9.5 限制操作方法所支持的HTTP請(qǐng)求 217 9.5.1 示例:只支持HTTP-PUT請(qǐng)求的操作方法 217 9.5.2 內(nèi)置特性類(lèi) 218 9.6 區(qū)域 220 9.7 視圖 221 9.7.1 視圖文件的默認(rèn)存放路徑 221 9.7.2 自定義視圖的路徑格式 222 9.7.3 布局視圖 225 9.7.4 示例:布局視圖的查找順序 226 9.7.5 示例:配置Razor Pages布局視圖的查找路徑 229 9.7.6 _ViewImports與_ViewStart文件 231 9.7.7 示例:_ViewStart文件的替換行為 232 9.8 IViewLocationExpander接口 233 9.8.1 示例:多版本視圖 234 9.8.2 示例:根據(jù)URL查詢(xún)參數(shù)擴(kuò)展視圖路徑 237 9.8.3 LanguageViewLocationExpander類(lèi) 240 9.9 局部視圖 242 9.9.1 示例:成績(jī)單 243 9.9.2 示例:導(dǎo)航欄 246 9.10 視圖組件 248 9.10.1 示例:一個(gè)簡(jiǎn)單的視圖組件 249 9.10.2 視圖文件的查找路徑 250 9.10.3 示例:帶參數(shù)的視圖組件 251 9.10.4 通過(guò)標(biāo)記幫助器調(diào)用視圖組件 253 9.10.5 示例:Greeting視圖組件 254 9.10.6 示例:在MVC控制器中調(diào)用視圖組件 255 9.10.7 兩個(gè)特性類(lèi) 255 9.11 識(shí)別其他程序集中的控制器 256 9.11.1 示例:使用ApplicationPartAttribute類(lèi) 256 9.11.2 示例:使用AddApplicationPart()擴(kuò)展方法 257 9.11.3 示例:使用ApplicationPartManager類(lèi) 259 第10章 模型綁定 261 10.1 概述 261 10.2 自動(dòng)綁定 262 10.2.1 示例:計(jì)算器 263 10.2.2 示例:綁定數(shù)組類(lèi)型的數(shù)據(jù) 264 10.2.3 示例:綁定復(fù)雜類(lèi) 266 10.2.4 多個(gè)參數(shù)的模型綁定 268 10.2.5 示例:綁定3個(gè)參數(shù) 268 10.2.6 字典類(lèi)型的模型綁定 270 10.2.7 示例:綁定字典數(shù)據(jù) 270 10.2.8 示例:綁定IFormCollection類(lèi)型 272 10.2.9 示例:MD5計(jì)算器 273 10.2.10 綁定IFormFile和IFormFileCollection類(lèi)型 274 10.2.11 示例:上傳一個(gè)文本文件 275 10.2.12 示例:上傳多個(gè)文件 276 10.3 設(shè)置模型綁定的來(lái)源 278 10.3.1 示例:綁定HTTP消息頭 278 10.3.2 示例:從HTTP消息正文提取數(shù)據(jù) 279 10.3.3 示例:與路由參數(shù)綁定 280 10.3.4 示例:FromServices特性的使用 280 10.3.5 示例:混合使用From*特性類(lèi) 282 10.3.6 示例:將From*特性類(lèi)應(yīng)用于屬性成員 283 10.4 自定義IValueProvider接口 284 10.4.1 示例:由自定義字符串提供的值 285 10.4.2 示例:CookieValueProvider 288 10.5 IModelBinder接口 292 10.5.1 內(nèi)置綁定器 293 10.5.2 示例:AddressInfoModelBinder類(lèi) 294 10.6 BindRequiredAttribute類(lèi)與BindNeverAttribute類(lèi) 296 10.7 綁定到屬性成員 299 10.7.1 示例:控制器的屬性綁定 299 10.7.2 示例:PageModel中的屬性綁定 300 10.7.3 示例:CancellationToken類(lèi)型的屬性綁定 302 第11章 Web API 305 11.1 Web API基礎(chǔ) 305 11.1.1 ControllerBase類(lèi)與Controller類(lèi) 305 11.1.2 ApiController特性 306 11.1.3 示例:一個(gè)簡(jiǎn)單的Web API 306 11.1.4 示例:以POST方式提交數(shù)據(jù) 308 11.2 XML格式 310 11.2.1 示例:常規(guī)的XML序列化方案 311 11.2.2 示例:使用XmlDataContractSerializer方案 314 11.3 選擇響應(yīng)格式 316 11.3.1 示例:通過(guò)Accept消息頭選擇響應(yīng)格式 316 11.3.2 示例:使用格式過(guò)濾器 317 11.4 自定義格式 319 11.4.1 示例:CustDataInputFormatter類(lèi) 319 11.4.2 示例:BytesToHexOutputFormatter類(lèi) 323 11.5 極小API 325 11.5.1 示例:一些簡(jiǎn)單的極小API例子 325 11.5.2 示例:在極小API上使用數(shù)據(jù)源特性 327 11.5.3 上傳文件 328 11.5.4 示例:直接讀取文件流 328 11.5.5 示例:上傳多個(gè)文件 330 11.5.6 IResult接口 332 11.5.7 示例:Results類(lèi)的使用 333 11.6 API瀏覽功能 333 11.6.1 IApiDescriptionGroupCollectionProvider接口 334 11.6.2 示例:列出已定義的Web API 334 11.6.3 API約定 337 11.6.4 Swagger框架 339 11.6.5 示例:使用Swagger生成API文檔 340 第12章 過(guò)濾器 343 12.1 過(guò)濾器的執(zhí)行過(guò)程 343 12.1.1 示例:觀察過(guò)濾器的運(yùn)行順序 344 12.1.2 示例:同時(shí)實(shí)現(xiàn)多個(gè)接口 348 12.2 過(guò)濾器的作用域 349 12.2.1 示例:全局過(guò)濾器 349 12.2.2 示例:特性化的過(guò)濾器 350 12.3 在Razor Pages中使用過(guò)濾器 352 12.3.1 示例:在Razor標(biāo)記頁(yè)和頁(yè)面模型類(lèi)上應(yīng)用過(guò)濾器 352 12.3.2 示例:在Razor Pages中應(yīng)用全局過(guò)濾器 353 12.3.3 頁(yè)面處理程序的過(guò)濾器 354 12.3.4 示例:實(shí)現(xiàn)IPageFilter接口 354 12.4 異步過(guò)濾器接口 355 12.4.1 示例:實(shí)現(xiàn)異步授權(quán)過(guò)濾器 356 12.4.2 示例:實(shí)現(xiàn)異步資源過(guò)濾器 356 12.5 IAlwaysRunResultFilter接口 358 12.6 IFilterFactory接口 360 12.6.1 示例:訪問(wèn)服務(wù)容器中的過(guò)濾器 360 12.6.2 示例:使用TypeFilterAttribute類(lèi)創(chuàng)建過(guò)濾器實(shí)例 361 12.6.3 示例:使用ServiceFilterAttribute類(lèi)訪問(wèn)服務(wù)容器中的過(guò)濾器 363 12.7 過(guò)濾器的運(yùn)行順序 364 12.7.1 示例:過(guò)濾器的作用域與運(yùn)行順序 364 12.7.2 示例:自定義過(guò)濾器的運(yùn)行順序 368 12.8 抽象的過(guò)濾器特性類(lèi) 369 12.8.1 示例:重寫(xiě)ActionFilterAttribute類(lèi) 370 12.8.2 示例:重寫(xiě)ExceptionFilterAttribute類(lèi) 371 第13章 標(biāo)記幫助器 372 13.1 標(biāo)記幫助器簡(jiǎn)介 372 13.1.1 示例:為標(biāo)記添加加粗功能 373 13.1.2 示例: 13.1.3 示例:使用標(biāo)記幫助器設(shè)置HTML元素的文本樣式 375 13.2 將標(biāo)記幫助器注冊(cè)到服務(wù)容器 377 13.3 內(nèi)置的標(biāo)記幫助器 380 13.3.1 示例:緩存當(dāng)前時(shí)間 380 13.3.2 示例:用 13.3.3 示例:asp-for屬性的使用 382 13.3.4 示例:呈現(xiàn)驗(yàn)證信息 384 13.4 標(biāo)記幫助器組件 386 13.4.1 示例:在 元素內(nèi)插入CSS樣式 38713.4.2 示例:使用ITagHelperComponentManager對(duì)象注冊(cè)標(biāo)記幫助器組件 389 第14章 靜態(tài)文件 392 14.1 靜態(tài)文件簡(jiǎn)介 392 14.2 使用靜態(tài)文件 393 14.2.1 示例:訪問(wèn)圖像文件 393 14.2.2 示例:修改WEBROOT路徑 395 14.2.3 示例:統(tǒng)計(jì)輸入的字符數(shù)量 397 14.2.4 示例:合并多個(gè)目錄 398 14.3 目錄瀏覽 400 14.3.1 示例:瀏覽外部目錄 401 14.3.2 示例:自定義文件類(lèi)型映射 401 14.4 文件服務(wù) 410 第15章 路由約束 412 15.1 路由約束的作用 412 15.2 IRouteConstraint接口 412 15.3 內(nèi)置的路由約束 413 15.3.1 示例:雙精度數(shù)值約束 415 15.3.2 示例:限制字符串長(zhǎng)度 415 15.3.3 示例:特定格式的訂單號(hào) 416 15.3.4 示例:限制整數(shù)值的范圍 417 15.4 自定義路由約束 417 第16章 SignalR 419 16.1 WebSocket 419 16.1.1 示例:用JavaScript實(shí)現(xiàn)客戶(hù)端 419 16.1.2 示例:用.NET控制臺(tái)實(shí)現(xiàn)WebSocket客戶(hù)端 422 16.1.3 子協(xié)議 424 16.2 SignalR基礎(chǔ) 427 16.2.1 SignalR中心 428 16.2.2 示例:簡(jiǎn)易計(jì)算器 428 16.2.3 示例:使用面向.NET的SignalR庫(kù) 430 16.3 調(diào)用客戶(hù)端 433 16.3.1 示例:聊天室 433 16.3.2 將客戶(hù)端定義為接口 435 16.3.3 示例:實(shí)時(shí)更新進(jìn)度條 436 16.3.4 示例:記錄連接狀態(tài) 438 第17章 Blazor 442 17.1 Blazor概述 442 17.2 服務(wù)器托管 443 17.2.1 示例:使用Razor Pages承載Blazor應(yīng)用 444 17.2.2 示例:在MVC視圖中承載Blazor應(yīng)用 446 17.2.3 初始化腳本 448 17.2.4 示例:使用初始化腳本 449 17.2.5 示例:手動(dòng)添加modules.json文件 450 17.3 WebAssembly托管 451 17.3.1 示例:手動(dòng)創(chuàng)建Blazor WebAssembly項(xiàng)目 452 17.3.2 示例:用node.js開(kāi)發(fā)Blazor WebAssembly服務(wù)器 454 17.3.3 示例:初始化腳本 457 17.3.4 DevServer 458 17.4 路由組件 459 17.4.1 示例:路由組件的簡(jiǎn)單應(yīng)用 460 17.4.2 示例:使用路由參數(shù) 461 17.4.3 示例:使用[Route]特性 463 17.5 布局組件 463 17.5.1 示例:導(dǎo)航欄 464 17.5.2 示例:將普通組件用于布局 466 17.6 組件參數(shù) 466 17.6.1 示例:嵌套組件的參數(shù)傳遞 466 17.6.2 示例:頂層組件的參數(shù)傳遞(Blazor Server) 467 17.6.3 示例:頂層組件的參數(shù)傳遞(Blazor WebAssembly) 468 17.7 級(jí)聯(lián)參數(shù) 469 17.7.1 示例:根據(jù)類(lèi)型接收級(jí)聯(lián)參數(shù) 469 17.7.2 示例:根據(jù)命名接收級(jí)聯(lián)參數(shù) 472 17.8 事件 473 17.8.1 示例:計(jì)數(shù)器 476 17.8.2 示例:記錄鼠標(biāo)指針的位置 476 17.8.3 EventCallback結(jié)構(gòu)體 477 17.8.4 示例:進(jìn)度條組件 478 17.9 CSS隔離 480 17.10 數(shù)據(jù)綁定 482 17.10.1 示例:綁定日期輸入元素 483 17.10.2 示例:使用oninput事件 483 17.10.3 組件之間的綁定 484 17.10.4 示例:Slider組件 485 17.11 用.NET代碼編寫(xiě)組件 486 17.11.1 渲染樹(shù) 487 17.11.2 示例:用.NET代碼實(shí)現(xiàn)App和Index組件 488 17.11.3 示例:使用依賴(lài)注入 491 17.12 .NET與JavaScript互操作 493 17.12.1 示例:調(diào)用JavaScript中的alert()方法 494 17.12.2 示例:調(diào)用QRCode.js生成二維碼 494 17.12.3 示例:階乘計(jì)算器 496 17.12.4 示例:JavaScript調(diào)用.NET對(duì)象的實(shí)例方法 497 第18章 驗(yàn)證與授權(quán) 500 18.1 驗(yàn)證與授權(quán)的關(guān)系 500 18.2 與驗(yàn)證有關(guān)的核心服務(wù) 501 18.3 驗(yàn)證處理程序 501 18.3.1 示例:驗(yàn)證HTTP消息頭 502 18.3.2 示例:多個(gè)驗(yàn)證方案共用一個(gè)IAuthenticationHandler接口 505 18.4 IAuthenticationSignInHandler接口 508 18.5 驗(yàn)證中間件 515 18.6 授權(quán)處理程序與必要條件 519 18.6.1 示例:允許指定的部門(mén)訪問(wèn) 520 18.6.2 PassThroughAuthorizationHandler類(lèi) 522 18.7 授權(quán)策略 525 18.7.1 示例:按用戶(hù)星級(jí)授權(quán) 525 18.7.2 示例:集成內(nèi)置的Cookie驗(yàn)證 529 18.7.3 示例:在終結(jié)點(diǎn)上應(yīng)用授權(quán)策略 534
你還可能感興趣
我要評(píng)論
|