ASP.NET Core Razor Pages in Action 1 Razor Pages 入门
本章涵盖
• 什么是 Razor Pages
• 为什么你应该使用 Web 开发框架
• 您可以使用 Razor Pages 做什么
• 何时以及为何应选择 Razor Pages
• 使用 Razor Pages 所需的工具
感谢您购买此 Razor Pages in Action 副本,无论是实体版还是虚拟版。通过这样做,您将了解什么是 Razor Pages、可以使用 Razor Pages 做什么,以及在决定 Razor Pages 是否是构建下一个 Web 应用程序的不错选择时需要考虑的事项。剧透警告:如果您想开发以页面为中心的交互式 Web 应用程序,那就好了!
本章将探讨 Razor Pages 的技术,并研究 Razor Pages 与其他 Web 开发框架之间的异同。完成本章后,您应该知道 Razor Pages 是否适合您的下一个应用程序,并期待在下一章中使用 Razor Pages 构建您的第一个应用程序。
如果可以的话,我将对你做一些假设。我假设您已经了解 Web 的核心技术 — HTTP、HTML、CSS 和 JavaScript— 以及它们如何协同工作。我假设您知道 Bootstrap 不仅仅是鞋类的固定。我假设您已经了解 C# 或类似的面向对象语言,或者您能够在学习 Razor Pages 的同时学习 C#。最后,我以您了解关系数据库的基础知识为前提。我提到这一切是因为我在本书中没有详细介绍这些主题中的任何一个,尽管我可能会给你一个奇怪的复习,我认为它有助于提供上下文。
还在我身边?好!我们走吧!
1.1 什么是 Razor Pages?
Razor Pages 是 Microsoft 提供的服务器端、跨平台、开源 Web 开发框架,使您能够将现有的 HTML、CSS 和 JavaScript 知识与 C# 语言结合使用,以构建以页面为中心的新式 Web 应用程序。现在,这有点拗口,所以让我们稍微分解一下。
1.1.1 Web 开发框架
首先,让我们看看什么是 Web 开发框架以及为什么您可能需要它。图 1.1 显示了本书出版商网站的主页 Manning.com。
图 1.1 Manning.com 屏幕截图
看看您可以在此网站上做的一些事情:
• 您可以搜索网站内容。
• 您可以从此站点购买东西。
• 您可以创建一个帐户并登录。
• 您可以注册时事通讯。
• 您可以查看最新的图书发行。
• 您可以查看您之前访问时查看的项目。
• 您可以阅读对作者的采访。
这是很多复杂的功能,而且 Manning 有这么多的书籍和作者,必须有大量的页面需要维护。想想重新设计网站以使其焕然一新所需的工作,将更改应用于所有这些无数的页面!
Web 开发框架通过为常见任务提供预构建的解决方案来减轻这些复杂性,因此您可以继续构建应用程序。以显示所有这些书籍的详细信息的任务为例。不必为每本书创建一个页面,框架(如 Razor Pages)将为您提供创建模板以显示任何书籍的功能。它还包括占位符,因此可以从中央存储(例如数据库)获取特定书籍的详细信息,例如其标题、作者、ISBN 和页数(很像邮件合并文档的工作方式)。现在,您只需管理所有书籍的一页,而不是每本书一页。
管理用户信息的任务怎么样?您将需要某种方法来存储此信息并将其与用户提供的登录详细信息进行匹配。您还需要提供一种机制来识别当前用户已成功登录,这样他们就不必为要查看的每个后续页面再次进行身份验证。您需要安全地完成所有这些作,采用可接受级别的加密技术。同样,一个好的框架将为您提供这些功能。您所要做的就是了解这些功能的工作原理并将它们插入到您的应用程序中,将实现加密和哈希等低级专业任务的谜团留给知道自己在做什么的专家。
这些示例涉及 Web 开发框架提供的几个功能。(图 1.2)。但名单并不止于此。想想开发 Web 应用程序可能需要您执行的任何常见重复性任务:处理传入的数据请求、映射不包含文件扩展名的 URL、与数据库通信、处理和验证表单提交、处理文件、发送电子邮件。使用包含这些功能的框架时,所有这些任务都会变得更加容易。当您完成本书时,您将能够使用 Razor Pages 轻松完成所有这些任务。
图 1.2 工作流图显示了涉及使用模板的过程在 Razor Pages 中的工作原理。此工作流从左下角开始,客户端请求 /book/razor-pages-in-action 或类似内容。白色箭头显示通过 Internet 到 Web 服务器的行进方向,该服务器找到正确的应用程序,然后将处理传递给 Razor 页面(其中包含 func())。然后,控制权将传递给应用程序服务层,该层负责从数据库中检索详细信息。数据将发送到服务层(请参阅灰色箭头),然后发送到 Razor 页面,在那里它与视图模板(带有 @ 符号的模板)合并以创建 HTML。生成的 HTML 通过应用程序传递到 Web 服务器,然后返回给客户端。
除了为功能需求提供解决方案外,框架通常还提供构建和部署应用程序的标准方法。它们可能会鼓励您在构建应用程序时采用经过验证的软件设计模式,以使结果更易于测试和维护。
从本质上讲,Web 开发框架可以通过为常见的重复性任务提供预构建和测试的解决方案来加快开发 Web 应用程序的过程。他们可以通过鼓励您按照一组标准工作来帮助您产生一致的结果。
1.1.2 服务器端框架
接下来,我们将了解一下 Razor Pages 是服务器端框架的含义。在开发动态 Web 应用程序时,您必须确定 HTML 的生成位置。您可以选择在用户的设备(客户端)或 Web 服务器上生成 HTML。
在客户端上生成 HTML 的应用程序或单页应用程序 (SPA) 在可以使用的技术方面受到限制。直到最近,你还只能真正使用 JavaScript 来创建这类应用程序。自从 Blazor 推出以来,这种情况发生了变化,它使你能够使用 C# 作为应用程序编程语言。若要详细了解此内容,请参阅 Chris Sainty 的 Blazor in Action(Manning,2021 年)。由于大多数应用程序处理都在用户的设备上进行,因此您必须注意其资源,您无法控制这些资源。在编写代码时,您还必须考虑浏览器功能之间的差异。另一方面,客户端应用程序可以带来丰富的用户体验,甚至可以与桌面应用程序非常相似。主要在客户端上呈现的应用程序的优秀示例包括 Facebook 和 Google Docs。
在服务器上呈现 HTML 的应用程序可以利用服务器支持的任何框架或语言,并拥有服务器可以提供的尽可能多的处理能力。这意味着 HTML 生成是可控且可预测的。此外,所有应用程序逻辑都部署到服务器本身,这意味着它与服务器一样安全。由于处理的输出应该是符合标准的 HTML,因此您不需要太担心浏览器的怪癖。
1.1.3 跨平台功能
可以在各种平台上创建和部署 Razor Pages 应用程序。Windows、Linux、macOS 和 Docker 均受支持。如果您想在超薄且昂贵的 MacBook Air 或 Surface Pro 上创建应用程序,您可以。或者,如果您更喜欢使用运行 Debian 或 Ubuntu 的翻新 ThinkPad,没问题。您仍然可以与使用不同平台的同事共享您的源代码。您的部署选项同样不受限制,这意味着您可以利用您的网络托管公司提供的最优惠价格。
1.1.4 开源
过去,当我第一次被授予 Microsoft 最有价值专业人士(MVP,Microsoft 评判为通过分享技术专业知识为社区做出重大贡献的人的年度奖项)时,该奖项的好处之一是可以直接访问负责 MVP 专业领域的 Microsoft 产品组。就我而言(我确信这是错误的身份之一),专业领域是 ASP.NET,Microsoft 的 Web 开发框架。
能够访问 ASP.NET 产品组是一个特权地位。请记住,在那个年代,Microsoft 在很大程度上是一家闭源公司。Microsoft MVP 比社区其他成员更早地了解了 Microsoft 在其领域的一些新产品计划。他们甚至可能会被邀请对他们的新产品进行一些 beta 测试或提供改进建议,尽管所有主要设计决策通常是在您获得访问权限时做出的。
几年后,Microsoft 已经转变为一家开源公司。他们开发平台的源代码在 GitHub 上供所有人查看。不仅如此,我们鼓励每个人通过提交可能的错误并提供改进、新功能、错误修复或更好的文档来为源代码做出贡献。与其被告知 Microsoft 将在遥远的将来发布什么,不如参与关于框架应该采取的方向的对话。任何人都可以在 GitHub 上询问有关框架的问题,通常可以从 Microsoft 开发人员那里获得答案。
Microsoft 在这种方法上取胜,因为他们受益于公司外部的专家,增加了他们的技术专长,甚至增加了时间,而框架的用户则受益,因为他们获得了其他真实用户影响的更好的产品。在撰写本文时,Razor Pages 所属的 ASP.NET 的当前版本 ASP.NET Core 拥有超过 1,000 个活跃的贡献者。
1.1.5 使用您现有的知识
Razor Pages 支持的服务器端语言是 C#,而视图模板主要由 Web 语言(HTML、CSS 和 JavaScript)组成。前面讨论的动态内容的占位符是 C# 代码。使用 Razor(一种简单易学的模板语法)在视图模板中嵌入服务器端表达式和代码。您无需学习任何新语言即可使用 Razor Pages。您甚至不需要真正了解 SQL 即可访问数据库,因为 .NET 包含您将用于生成数据库的框架。
1.2 您可以使用 Razor Pages 做什么?
Razor Pages 是一个以页面为中心的框架。它的主要目的是生成 HTML。因此,它适用于创建任何 Web 应用程序或由网页组成的基于 Web 的应用程序的任何部分。事实上,列出你不能用 Razor Pages 做的事情可能更容易!
您之前查看了 Manning 的网站 — 一个在线目录和电子商务网站。我被可靠地告知它不是用 Razor Pages 构建的,但它可能是。我在博客和教程网站上使用了 Razor Pages,其中数据存储在数据库中或作为需要转换为 HTML 的 Markdown 文件。我还在日常工作中使用 Razor Pages 来构建杂志网站,使用基于 Web 的内部工具来管理与业务相关的工作流程和报告,甚至是自定义内容管理系统。将页面作为要求的一部分的任何类型的 Web 应用程序都是 Razor Pages 的候选对象 - 从简单的博客网站到下一个 eBay。
Razor Pages 特别适用于任何类型的基于表单的应用程序。创建、读取、更新和删除通常称为 CRUD 应用程序,代表与模型的持久存储相关的四个基本作。这些工具可用于快速搭建用于管理任何实体的表单集合,您将在本书的后面部分使用这些工具。
1.3 支撑 Razor Pages 的技术
Razor Pages 位于从 .NET 6 开始的堆栈的顶部,.NET 6 是 Microsoft 的一个大型框架,支持各种跨平台应用程序的开发,包括桌面、移动、云、游戏,当然还有 Web(图 1.3)。基层也称为基类库 (BCL),包括大多数开发类型通用的较低级别库,例如提供数据类型或支持处理集合、文件、数据、线程异常、电子邮件等的库。
图 1.3 .NET 堆栈。Razor Pages 是 MVC 框架的一项功能,而 MVC 框架又是 ASP.NET Core 框架的一部分,该框架代表 Web 开发层。
堆栈的 Web 层称为 ASP.NET Core。它包括用于处理 HTTP、路由、身份验证的库,以及用于支持 Razor 语法和 HTML 生成的类。除了我之前提到的 Blazor 之外,ASP.NET Core 还包括 SignalR,这是一个用于将数据从服务器推送到连接的客户端的框架。SignalR 用例的最简单示例是聊天应用程序。
除了 SignalR 和 Blazor 之外,还有 ASP.NET Core 模型-视图-控制器 (MVC) 框架,顶部是 Razor Pages。Razor Pages 是 MVC 框架的一项功能,它支持开发遵循 MVC 设计模式的 Web 应用程序。要理解这意味着什么,有必要了解 ASP.NET Core MVC 框架的性质。
1.3.1 ASP.NET Core MVC 框架
ASP.NET Core MVC 是 Microsoft 的原始跨平台 Web 应用程序框架。这就是所谓的固执己见的框架。框架设计者对框架的用户应该应用的架构决策、约定和最佳实践有意见,以产生最高质量的结果。然后,框架设计人员生成一个框架,引导用户采用这些架构决策、约定和最佳实践。整个 Microsoft 的开发人员将此过程描述为帮助客户陷入“成功的深渊”。
1.3.2 模型-视图-控制器
MVC 框架背后的开发人员的主要架构决策是支持实现 MVC 模式的 Web 应用程序的开发,因此,框架的名称也应运而生。之所以做出这一决定,是因为 MVC 是 Web 开发中一种众所周知的表示设计模式,其目的是强制分离关注点 — 具体而言,应用程序模型及其表示的关注点。
MVC 中的 V 是视图或页面。M 是应用程序模型,它是一个模糊的术语,表示应用程序中不是视图或控制器的所有内容。该模型包括数据访问代码、业务或域对象(在曼宁的情况下,您的应用程序的全部内容(书籍、作者和客户))以及旨在管理它们的编程逻辑(即业务逻辑)。然后,根据其他良好的软件设计实践,应用程序模型需要进一步分离,但这不是 MVC 的业务,它纯粹是一种表示设计模式。在 UI 和模型的其余部分之间强制分离的主要原因是提高维护和可测试性。如果应用程序逻辑与 HTML 混合在一起,则很难测试应用程序逻辑。
MVC 的控制器部分是模型和视图之间分离的主要方式。它的作用是接受请求,然后使用请求中的信息对模型执行命令。然后,它将获取该处理的结果并将其传递给视图进行显示。
控制器可以通过不同的方式实现。您可以创建类似前端控制器的东西来处理对整个应用程序或应用程序子集的请求,也可以使用页面控制器模式来处理对单个页面的请求。最初的 ASP.NET MVC 框架实现利用了前端控制器方法,其中单个控制器负责协调与应用程序中的功能或业务区域相关的多个端点(AuthorController、BookController 等)的处理。Razor Pages 实现页面控制器方法,控制器是从 PageModel 派生的类。
ASP.NET MVC 框架中的前端控制器单独负责的不仅仅是页面控制器(图 1.4)。他们必须协调与特定业务领域相关的所有作的处理 — 创建、更新、删除、获取列表、获取详细信息等。随着时间的推移,前端控制器可能会增长到数百行(如果不是数千行)代码。它们采用的依赖项数量增加,这肯定表明控制器做得太多了。它们变得难以管理。另一方面,页面控制器要简单得多,只需要管理其单个页面的处理。其中一些几乎没有任何代码。
图 1.4 MVC 中使用的前端控制器协调多个视图的处理,可能会变得非常繁忙和复杂。在 Razor Pages 中,每个页面都有自己的控制器,使它们保持精简且更易于使用。
1.3.3 Razor Pages 的设计目标
正如您已经了解到的,MVC 框架是一个固执己见的框架。如果您想使用它,则需要使用框架作者的约定或开发某种解决方法。ASP.NET MVC 包含许多用于命名文件并将其放置在应用程序中的约定。例如,假设您的客户或老板希望您向现有 MVC 应用程序添加新功能。请记住,前端控制器类按照约定是功能驱动的,您必须将表示该功能的新类文件添加到 Models 文件夹,将新的控制器类添加到 Controllers 文件夹,将新功能的文件夹添加到 Views 文件夹中,将新的 Razor 视图添加到该文件夹,最后添加 viewmodel 类来表示视图的数据。如果要对该功能进行任何更改,则必须在整个代码库中插入和退出文件夹和文件。
不熟悉 MVC 模式的开发人员可能会发现使用 ASP.NET 实现的复杂性相当令人生畏。如果您不熟悉 ASP.NET MVC 应用程序的结构,并且发现自己对我刚才描述的工作流有点迷茫,欢迎加入我的目标受众!甚至 Microsoft 自己也把这个框架描述为具有 “高概念数”。因此,Razor Pages (https://github.com/aspnet/mvc/issues/494) 的设计目标是在该背景下设定的,并隐式地将使用 Razor Pages 与 MVC 框架进行比较。它们包括(引用的 GitHub 问题)以下内容:
• 使用 ASP.NET Core 使动态 HTML 和表单更加容易,例如,在页面中打印 Hello World 需要多少个文件和概念,构建 CRUD 表单等。
• 减少以页面为中心的 MVC 方案所需的文件数量和文件夹结构的大小
• 简化实现常见的以页面为中心的模式所需的代码,例如动态页面、CRUD 表单等。
• 启用在必要时返回非 HTML 响应的功能,例如 404s
• 尽可能多地使用和公开现有的 MVC 基元(组件)
最终,引入了 Razor Pages,使使用 MVC 模式比使用现有框架更简单。这并不是说 Razor Pages 仅适用于简单的场景 — 远非如此,尽管您可能会在各种网站上找到这种视图。但是,当被追问时,您会发现大多数持有这种观点的人都承认没有尝试过 Razor Pages。
1.4 什么时候应该使用 Razor Pages?
为了与我的说法保持一致,列出 Razor Pages 不能执行的作可能更容易,我将通过查看何时不应考虑使用 Razor Pages 的示例来开始本节:
• 单页应用程序 - 作为服务器端开发框架,Razor Pages 不是构建单页应用程序的合适工具,在单页应用程序中,应用程序通常用 JavaScript 编写并在浏览器中执行,除非需要服务器呈现 (http://mng.bz/YGWB)。
• 静态内容站点 – 如果站点仅由静态内容组成,则启动 Razor Pages 项目不会有任何好处。您只是不需要一个主要目的是在服务器上动态生成 HTML 的框架。
• Web API - Razor Pages 主要是一个 UI 生成框架。但是,Razor 页面处理程序可以返回任何类型的内容,包括 JSON。不过,如果您的应用程序主要是基于 Web 的服务,则 Razor Pages 不是正确的工具。您应该考虑改用 MVC API 控制器。应该指出的是,如果您的要求是生成 HTML 以及通过 HTTP 提供服务,那么在同一个项目中混合使用 Razor 页面和 API 控制器是完全可能的(并且很容易的)。
• 从旧版本的 MVC 迁移 – 如果您希望将现有 MVC 应用程序从早期版本的 .NET Framework 迁移到 ASP.NET Core,则移植到 ASP.NET Core MVC 可能更有意义,因为您的许多现有代码无需修改即可重复使用。迁移后,您可以将 Razor Pages 用于迁移的应用程序中的所有以页面为中心的新功能,因为 MVC 控制器和 Razor Pages 可以愉快地位于同一应用程序中。
Razor Pages 是在 Visual Studio 中构建基于页面的 Web 应用程序的默认项目类型,因此,在除上述例外情况之外的所有情况下,都应将 Razor Pages 用于以页面为中心的应用程序,无论其复杂程度如何。
ASP.NET Core 的设计将性能作为一流的功能。该框架经常在备受推崇的 TechEmpower Web 框架性能评级 (https://www.techempower.com/benchmarks) 中名列前茅。因此,如果您需要一个提供 HTML 的高性能应用程序,Razor Pages 有一个很好的基础。
ASP.NET Core 应用程序设计为模块化。也就是说,您只包含应用程序所需的功能。如果您不需要某个功能,则不包括在内。这样做的好处是使已发布的应用程序的占用空间尽可能小。如果限制已部署应用程序的整体大小对您很重要,Razor Pages 也可以勾选该框。
最后,ASP.NET Core 背后的团队一定做对了什么,因为根据 Stack Overflow 的 2020 年开发人员调查,ASP.NET Core 是“最受欢迎”的 Web 开发框架(参见 https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-web-frameworks)。
1.5 使用 Razor Pages
此时,您知道什么是 Razor Pages、它的工作原理以及它可以为您做什么。您现在应该知道它是否适合您的应用程序。如果是,您需要知道从何处获取 Razor Pages 以及可以使用哪些工具来使用框架。下一节将提供这些问题的答案。首先,我们将介绍如何获取 Razor Pages;然后,我们将介绍使用该框架开发 Web 应用程序所需的工具。
1.5.1 如何获得 Razor Pages?
要开始开发 Razor Pages 应用程序,您需要 .NET 软件开发工具包 (SDK)。当您首次安装 Visual Studio(Microsoft 的旗舰软件开发环境)时,将自动包含此密钥。之后,您可能需要手动安装 SDK 的更新版本。如果您使用的编辑器不包含 SDK,则需要手动安装 SDK。SDK 可在 https://dotnet.microsoft.com/download 获取。
版本可用于 Windows、Linux、macOS 和 Docker(图 1.5)。当前版本已明确标记并推荐使用,因为它包含最新的错误修复和其他改进。一个版本也将被标记为长期支持 (LTS) 版本;这可能是也可能不是当前版本。LTS 版本会在较长一段时间内继续接收关键错误修复。当前版本 .NET 6 是 LTS 版本,自其发布日期(2021 年 11 月)起,将继续受支持三年。Microsoft 的目标是使从一个 LTS 版本迁移到下一个 LTS 版本成为一种相对轻松的体验。
图 1.5 SDK 下载页面图
下载页提供对每个 .NET/.NET Core 版本的 SDK 和运行时的访问。SDK 包括运行时和一组用于开发应用程序的工具,包括用于 .NET 的命令行界面 (CLI)。CLI 提供对一系列命令的访问,这些命令使您能够开发、构建、运行和发布 .NET 应用程序。
运行时仅包括运行 .NET 应用程序所需的组件。运行时主要用于在不进行开发的计算机上进行部署。您可以在计算机上安装多个版本的 SDK 和/或运行时。他们快乐地比肩生活。
1.5.2 选择开发环境
从理论上讲,您可以只使用命令行开发 Razor Pages 应用程序,也许还可以使用 Windows 记事本等基本文本编辑器,但现实情况是,您将需要使用旨在支持 .NET Core 开发的工具,从而减轻您的大部分繁重工作。这些工具中最强大的是集成开发环境 (IDE),将包括源代码编辑器,这些编辑器具有语法突出显示、代码完成、静态代码分析以及用于调试、编译和发布应用程序的功能。IDE 通常支持常见的工作流程,例如创建应用程序和基于现有模板添加各种类型的文件。它们通常还包括与数据库和版本控制系统的集成。
用于 .NET 开发的最流行的 IDE 是 Microsoft 的 Visual Studio。要享受 .NET 6 支持,您需要使用 2022 版本。它有三个版本:Community、Professional 和 Enterprise。社区版是 Visual Studio 的完整版,与专业版的不同仅在于其许可证。社区版对个人和小型公司(如许可条款 (https://visualstudio.microsoft.com/vs/community/ 中所定义)免费,也可供学术使用或参与开源项目。企业版旨在供大型团队使用,并相应地定价。所有版本都仅适用于 Windows(图 1.6)。
图 1.6 https://visualstudio.microsoft.com/ 截图,读者可以获取目前提到的所有三个 IDE
有一个适用于 Mac 用户的 Visual Studio 版本,但它不是 Windows 版本的直接移植。它是 Xamarin Studios 的改编版本,主要是移动应用程序开发环境。但是,它支持 Razor Pages 开发,并且提供免费的社区版。
Visual Studio Code (VS Code) 是一种流行的免费跨平台代码编辑器(与开发环境相反)。大量且不断增长的扩展可用,使 VS Code 中的 .NET Core 开发变得非常容易,包括 C# 语言集成、调试和版本控制集成。VS Code 不包含 Visual Studio 提供的用于处理 Razor Pages 的相同类型的工具集成,但它确实具有集成终端,可轻松访问 .NET CLI,并且出色的 OmniSharp 扩展为 VS Code 中的 C# 开发提供了出色的支持。本书将讨论如何使用 VS Code 终端执行 CLI 命令;您可以从 https://code.visualstudio.com/ 下载 VS Code。
如果您想在 Mac 或 Linux 系统上进行开发,VS Code 是一个不错的选择。或者,JetBrains 的 Rider 是一个跨平台的 .NET IDE,提供 30 天免费试用。
在本书中,我将向您展示如何使用 Visual Studio Community Edition 和 VS Code 开发 Razor Pages 应用程序,但无论您选择使用哪个平台,您都可以按照这些示例进行作。
1.5.3 选择数据库系统
Web 应用程序需要一种方法来持久保存数据。ASP.NET Core 不会对您的选项施加任何技术限制。如果需要,可以将数据存储为一系列文本文件,但最常用的数据存储是某种关系数据库。您还需要一种方法来在应用程序和数据库之间建立连接、执行数据库命令以及访问任何生成的数据。.NET 6 包括一种称为 ADO.NET 的低级数据访问技术。它以类似于内存中数据库表或视图的结构向应用程序公开数据。如果要访问数据片段,则必须使用索引器和转换或强制转换:
var myInt = Convert.ToInt32(dataTable.Rows[1][4]);
这是一种丑陋且容易出错的应用程序开发方法。它只需要有人更改上一个 C# 语句所依赖的 SQL 语句中的列顺序,因为目标位置的具体化值无法再转换为 int。如今,开发人员通常更喜欢将数据作为对象(例如,Book 类或 Author 类)来处理,并将使用对象关系映射 (ORM) 工具来管理数据库和应用程序之间的通信。ORM 还负责(除其他外)将数据从数据库查询映射到指定的对象或对象集合。
.NET 开发人员可以使用多种 ORM 工具。他们中的大多数由第三方拥有和管理。我为本书选择的 ORM 是 Entity Framework Core (EF Core)。我将使用这个 ORM,因为它是一种 Microsoft 技术,是 .NET 的一部分。图 1.7 是图 1.3 的更新版本,显示了 EF Core 在 .NET 堆栈中的位置。
图 1.7 Entity Framework Core 是一个可选组件,但它可用于支持在 .NET 6 上构建的各种应用程序类型(包括 ASP.NET、桌面、移动、云和游戏)中的数据访问。
定义提供程序是处理 C# 应用程序代码与数据存储本身之间的通信的组件。像 EF Core 这样的 ORM 的真正好处之一是,您不需要用数据存储特定的语言编写命令。您可以使用 C# 来表达数据命令,这与数据存储无关。每个单独的提供商都负责生成所选数据存储支持的域特定语言 (DSL)(除许多其他事项外)。在大多数情况下,此 DSL 是 SQL。
使用 EF Core 将提高您的工作效率,但也会根据专业提供商的可用性和/或成本,在数据库系统方面为您提供的选项增加限制因素。话虽如此,EF Core 支持大量数据库系统,尤其是最流行的数据库系统。要检查是否有适用于您首选数据库系统的提供商,请参阅官方文档:https://docs.microsoft.com/en-us/ef/core/providers/。
当您使用 EF Core 等 ORM 时,数据库系统之间的差异或多或少完全隐藏在应用程序本身之外。您为一个数据库系统的数据存储和检索编写的 C# 代码在另一个系统上的工作方式完全相同。一个系统与另一个系统之间唯一真正的区别是初始配置。在本书中,我选择了两个数据库系统:一个 SQL Server 版本,适用于仅限 Windows 的开发人员,以及 SQLite,适用于希望了解其他作系统的读者。我将强调它们之间出现的罕见差异。
在 Microsoft 世界中工作,您比其他任何选择都更有可能遇到他们的旗舰关系数据库系统 SQL Server。安装 Visual Studio 时,可以很容易地安装 SQL Server 的一个版本 LocalDB。它不是为生产用途而设计的,并且仅包含运行 SQL Server 数据库所需的最小文件集。因此,我选择了 LocalDB 作为想要使用 Windows 的读者使用的版本。
您使用 LocalDB 创建的任何数据库也可以与完整版的 SQL Server 一起使用。Visual Studio 包含一项称为“服务器资源管理器”的功能,该功能使您能够从 IDE 中连接到数据库并执行基本的数据库管理任务,例如修改表和运行查询。或者,您可以免费下载和安装 SQL Server Management Studio (SSMS) (https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16)。SSMS 是一个功能更强大的工具,包括用于管理数据库、分析查询性能和管理 SQL Server 安装的功能。
有大量的跨平台数据库选项可用,包括免费且非常流行的 MySQL。但是,我为希望在非 Windows 环境中进行开发的读者选择了基于文件的 SQLite 数据库系统,这仅仅是从易用性的角度来看。它已经安装在大多数版本的 Linux 和 macOS 上。话虽如此,如果您在 Windows 上进行开发,则没有理由不使用 SQLite。对于较小的网站来说,这是一个相当不错的选择。它与其余应用程序文件一起部署,从而可能简化部署并降低托管成本。在管理 SQLite 数据库方面,我使用免费的 SQL 数据库浏览器,它是跨平台的,可在 https://sqlitebrowser.org/ 使用。
无论您选择使用哪种数据库系统,您现在都应该准备好继续开发 Razor Pages 应用程序。您了解 Razor Pages 在 Web 开发侨民中的作用,以及使其成为绝佳选择的关键功能。它是现代且快速的,不会妨碍开发过程。在下一章中,您将立即生成第一个有效的 Razor Pages 应用程序,并学习构建更复杂应用程序的基础知识。
总结
Razor Pages 是一个以页面为中心的框架,用于开发动态 Web 应用程序。
Razor Pages 是一项 Microsoft 技术。
Razor Pages 是 ASP.NET Core 的一部分,而 Core 又是 .NET 6 的一部分。
Razor Pages 是跨平台的。
Razor Pages 是开源且免费的。
Razor Pages 建立在 ASP.NET Core MVC 的最佳部分之上。
Razor Pages 是使用页面控制器模式的 MVC 实现。
Razor Pages 主要关注在 Web 服务器上生成 HTML。
使用 C# 对 Razor Pages 应用程序进行编程。
HTML 是基于 Razor 语法(HTML 和 C# 的混合)从模板动态生成的。
Razor Pages 适用于数据库。