《ASP.NET Core 开发实战》 - 学习笔记

**《ASP.NET Core 开发实战》html

========== ========== ==========
[做者] (意) Dino Esposito
[译者] (中) 赵利通
[出版] 清华大学出版社
[版次] 2019年07月 第1版
[印次] 2019年12月 第2次 印刷
[订价] 79.80元
========== ========== ==========数据库

【前言】 编程

(PVI) 后端

ASP.NET Core 是 ASP.NET 开发人员须要了解的一种技术,是在多种平台上进行 Web 开发时可供使用的另外一种全栈解决方案。缓存

【第01章】 服务器

(P006) cookie

对于处理必须返回 HTML 内容的 Web 请求, ASP.NET MVC 编程模型是最灵活、最容易理解的方式。架构

(P008) 框架

.NET Core Framework 主要被设计为用于 ASP.NET 应用程序。异步

.NET Core Framework 只能用来编写 ASP.NET 和控制台应用程序。

.NET Core Framework 可与应用程序一同部署,而完整的 .NET Framework 只能安装到目标机器上,由全部应用程序共享。

(P009)

.NET Core Framework 是从头开始从新设计的一个新框架,看上去与完整的 .NET Framework 很相似,可是可以跨平台工做。

(P010)

ASP.NET Core 包含一个内置的 Web 服务器和一个运行应用程序代码的运行时环境。

【第02章】

(P015)

ASP.NET Core 有一个全新的运行时环境,只支持一种应用模型 : ASP.NET MVC 。

(P018)

通常来讲, Web 根文件夹是内容根文件夹的子文件夹,被命名为 wwwroot 。

(P019)

ASP.NET Core 应用程序须要在一个宿主中执行。宿主负责该应用程序的启动和生命周期管理。

(P021)

事实上, Configure 和 ConfigureServices 方法都是经过反射来发现并调用的。

(P026)

管道由中间件组件构成,这些组件在 Configure 中注册,对于每一个请求,按照注册的顺序调用它们。

(P032)

服务定位器模式更容易添加到现有框架中。依赖注入模式则是从头构建的框架的理想选择。

ASP.NET Core 中的 DI 框架并非完善的 DI 框架,没法与业界顶尖的框架一争。它只是作一些基本的任务,但作得很好,能知足 ASP.NET Core 平台的须要。

(P033)

须要重点注意,在 ConfigureServices 中能够注册外部 DI 框架。不过,在注册时,必须在启动类中把方法的返回类型从 void 改成 IServiceProvider 。

只有少数的 DI 框架被移植到了 .NET Core 中,其中包括 Autofac 和 StructureMap 。

要让自定义代码在经典 ASP.NET 中运行,最快捷的方法是使用 HTTP 处理程序。

【第03章】

(P053)

在经典 ASP.NET MVC 中,若是没有找到与 URL 匹配的路由,将获得 HTTP 404 状态码。可是,在 ASP.NET Core 中,任何终止中间件都将有机会来处理请求。

【第04章】

(P067)

控制器管理着请求的整个处理过程。

编写控制器类的步骤可总结为两个 : 实现一个类,而后在该类中添加一些公有方法,在运行时该类能够做为控制器被发现,而这些方法则可做为操做被发现。

(P068)

MVC 应用程序收到的只是一个待处理的 URL ,这个 URL 必须以某种方式映射到一个控制器类和一个公有方法。

(P069)

传统路由和特性路由并非互斥的。两者可用在同一个应用程序中。

特性路由始终是打开的,致使经过特性定义的路由比传统路由的优先级更高。

只要控制器类的名称带有 Controller 后缀,而且继承自 Controller 基类,就能够被系统发现。

(P070)

操做调用程序将 HTTP 上下文注入控制器实例,在控制器类内运行的代码可经过 HttpContext 属性方便地访问 HTTP 上下文。

(P073)

ASP.NET Core 提供了内置的依赖注入 (DI) 框架,开发人员可经过这个框架来注册抽象类型 (如接口) 及其具体类型,在请求抽象类型的引用时,返回该抽象类型的具体类型实例的工做则由框架来完成。

(P075)

在 Web 上,当点击连接或者在地址栏中输入 URL 时,是在执行 HTTP GET 命令。当提交 HTML 表单的内容时,是在执行 HTTP POST 命令。

(P080)

控制器操做方法可以访问 HTTP 请求传递的任何输入数据。

(P081)

编写操做方法体时,能够直接访问熟悉的 Request 对象及其子类集合 (如 Form 、 Cookies 、 Query 和 Headers) 提交的任何输入数据。

Request.Query 字典包含从 URL 的查询字符串提取的参数及其对应值的一个列表。注意,在搜索匹配项时,不考虑大小写。

(P082)

模型绑定器按精确的顺序将参数与传入的数据匹配起来。它首先检查是否可以在路由参数上找到匹配,而后检查表单提交的数据,最后检查查询字符串数据。

(P083)

默认绑定器可以映射全部的基本类型,如 string 、 int 、 double 、 decimal 、 bool 和 DateTime ,以及这些类型的相关集合。

(P085)

模型绑定器会寻找键名称与属性名称匹配的提交值。这种匹配是不区分大小写的。

(P090)

在 ASP.NET Core 中, Web API 框架 (包括其本身的控制器服务和操做结果类型) 已被集成到主框架中。

【第05章】

(P099)

从架构的角度来看,返回 HTML 标记的请求与返回纯本文或 JSON 数据的请求并无区别。

(P101)

调用 View 函数将触发视图引擎,返回一个对象,该对象封装了要使用的 Razor 模板文件 (一个扩展名为 .cshtml 的文件) 的名称和一个视图模型对象,后者包含了要在最终的 HTML 布局中显示的数据。

(P102)

视图引擎是 MVC 应用程序模型的核心组件,负责从视图建立 HTML 。

在控制器方法内,经过调用 View 方法来调用视图引擎。

母版页视图默认为一个名为 _Layout.cshtml 的 Razor 文件,其 HTML 布局是视图的基础。

(P104)

在 ASP.NET Core 中,每一个应用程序只有一个默认的视图引擎 : RazorViewEngine 类。

除了使用 ASP.NET Core 提供的 RazorViewEngine 类,也能够基于自定义语法来实现本身的视图引擎。

(P105)

使用区域就像是使用多个子应用程序,是将较大的应用程序分区成较小的片断的一种方法。

使用区域时,他们会对路由产生影响。在传统路由中,区域的名称是另外一个要考虑的参数。

(P110)

Razor 模板文件实际上就是 HTML 模板,其中穿插了一些用 C# 语言 (或者 ASP.NET Core 平台支持的其余任何语言) 编写的代码块。

@符号告诉解析器,在这个位置将发生静态内容到代码段的过渡。

(P112)

当多个 Razor 文件起做用时,编译过程将分步骤进行。首先处理布局模板,而后是 _ViewStart 和实际的视图。以后合并输出,这样 _ViewStart 中的公共代码将在视图以前渲染,而视图则在布局内输出其内容。

(P113)

控制器向视图传递数据时,最简单的方法是将信息存入一个 名称 / 值 字典中。

(P115)

对于使用 ViewData 这样弱类型的字典,最有说服力的理由是在编程时,它们使用起来简单快捷。

(P116)

通常来讲,在向视图传递数据时,强类型视图模型是优先选择的方法。

视图模型类彻底表明了要渲染到视图的数据。类的结构应该尽量与视图的结构匹配。

(P117)

通常来讲,应该努力让每一个 Razor 视图模型有一个专门的视图模型类。

能够接受把实体模型直接传递给视图的惟一一种状况是确实有一个 CRUD 视图的时候。可是,坦白讲,纯粹的 CRUD 视图现在只存在于教程和总结文章中。

(P118)

在 ASP.NET 中,能够将 DI 系统中注册的任何类型的实例注入视图中。这是经过 @inject 指令实现的。

ViewData 字典和 @inject 指令结合起来时,为从 Razor 视图中获取须要使用的任何数据提供了一种强大的、极为快速的方法。

(P119)

Razor 页面就像一个无布局的 Razor 视图,可是它们使用的根指令是 @page 。Razor 页面完整支持 Razor 语法,包括 @inject 指令和 C# 语言。

(P120)

须要注意, @page 指令会影响其余支持的指令的行为,因此必须是页面中的第一条 Razor 指令。

不能将 Razor 页面放到 Pages 文件夹以外。

【第06章】

(P123)

Razor 文件是一个文本文件,包含两个主要的语法项 : HTML 表达式和代码表达式。

(P124)

不管选择什么编程语言,@ 字符老是代表 Razor 代码表达式的开始位置。

(P126)

HTML 帮助程序是 HtmlHelper 类的一个扩展方法。抽象来说, HTML 帮助程序只不过是一个 HTML 工厂。

(P127)

xxxFor 帮助程序与基础版本的区别在于,它只接受一个 Lambda 函数做为参数。

当用来填充视图的数据被分组到一个模型对象中时, xxFor 版本特别有用。

(P128)

在 Razor 中,布局模板扮演了母版页的角色。布局模板定义了视图引擎在任何映射的视图中渲染的骨架,使得网站的对应部分有了一致的外观和感受。

布局模板是一个完整的 HTML 模板,以 <html> 开头,以 </html> 结束。

(P129)

在任何视图中,在引用图片、脚本和样式表等资源时,都建议使用波浪号运算符 (~) 来指代网站的根目录。

(P130)

全部布局都强制至少有一个注入点,供注入外部视图内容。这个注入点就是对方法 RenderBody 的调用。

每一个节都经过其名称标识,若是没有标记为可选,那么认为每一个节都是必须存在的。

(P131)

能够在 Razor 视图模板的任何位置定义一个节的内容。

【第07章】

(P151)

DI 框架有时也称为控制反转 (Inversion-of-Control, IoC) 框架。

DI 框架实际上就是将抽象类型 (一般是一个接口) 映射到一个具体类型。

(P153)

动态解析容许指定一个回调函数来解析依赖。

(P154)

必须调用 IServiceCollection 的某个 AddXxx 扩展方法来把本身的类型添加到 DI 系统中,以及将任何系统抽象类型绑定到不一样的实现。

(P164)

要利用好一种强大的技术,最好的办法就是把这种技术放到业务领域的上下文中。

对于软件技术,若是没有合理有效的架构,很难建立复杂的应用程序。

(P165)

在 ASP.NET MVC 应用程序中,表示层由控制器构成,应用层由控制器特定的服务类构成。

(P166)

当一个实体可用于输入、逻辑、持久化和视图时,说明处理的应用程序特别简单。

在 ASP.NET 中,任何输入数据都被封装到一个 HTTP 请求中,无论输入数据来自查询字符串、表单提交的数据仍是 HTTP 头或 cookie 。

(P167)

建议为每一个控制器建立一个服务类,让控制器的操做方法服从服务类。

服务类中的方法将接受输入模型中的类,返回视图模型中的类。

应用层位于表示层和后端之间,进行任何须要的转换。

当大量使用应用层时,控制器就成为精简的控制器,由于它们把所有协调工做移交给了应用层。最后,应用层是能够完整测试的,而且彻底不知道 HTTP 上下文。

存储库是最简单和最著名的领域服务示例。领域服务类一般会引用数据访问层。

(P169)

应该把异常处理中间件放到管道的最顶端,以确保可以检测到应用程序没有捕捉的全部可能发生的异常。

(P170)

HTTP 上下文的 Features 对象是获取未清除的异常信息的官方工具。

ASP.NET Core 的模块化程度极高,须要使用的几乎每一个功能都必须被显式启用。

【第08章】

(P182)

全部声明都是平等的,可是有一些声明比其余声明更加平等。

【第09章】

(P208)

layer 指的是应用程序组件之间的逻辑分离,而 tier 指的是物理上不一样的应用程序和服务器。

(P219)

NoSQL 存储主要用做一种缓存形式,不经常使用做主数据存储。

(P221)

EF Core 只支持 Code First 方法,这意味着它须要一组类来描述数据库和容器表。

【第11章】

(P260)

HTML 表单是由一组 INPUT 元素构成的,当按下某个提交按钮时,这些 INPUT 元素的值将被流传输到一个远程 URL 。

【第12章】

(P278)

分部视图不仅使结果页面组件化,增强重用和关注点隔离;并且更容易在客户端刷新页面的一部分,而不须要从新加载整个页面。

【第14章】

(P315)

ASP.NET Core 应用程序本质上是一个独立的控制台应用程序,它为实际的应用程序模型 (最有多是 MVC 应用程序模型) 设置宿主环境。

(P324)

对于 ASP.NET Core 2.0 , Kestrel 是最经常使用的内部 HTTP 服务器。这是一个基于 libuy 的跨平台 Web 服务器,而 libuy 是一个跨平台的异步 I/O 库。

(P325)

.NET Core 支持的全部平台和版本,都支持 Kestrel 。

(P327)

反向代理将实际的 Web 服务器与来自各类用户代理的请求彻底隔离开。

【第16章】

(P362)

ASP.NET Core 应用程序的跨平台本质是最重要的业务价值。

(P364)

ASP.NET Core 中性能提高的另一个缘由在于其模块化。

整个 ASP.NET Core 框架以 NuGet 包的形式提供,容许只选择本身真正须要的功能。**

相关文章
相关标签/搜索