面向 ASP.NET Web Forms 开发人员的 Blazor 简介

小窍门

此内容摘自电子书《面向 Azure ASP.NET Web Forms 开发人员的 Blazor》,可在 .NET 文档上获取,也可作为免费可下载的 PDF 脱机阅读。

《面向 ASP NET Web Forms 开发人员的 Blazor》电子书封面缩略图。

自 2002 年 .NET Framework 首次发布以来,ASP.NET Web 窗体框架一直是 .NET Web 开发的主食。 早在 Web 仍处于起步阶段时,ASP.NET Web 窗体通过采用许多用于桌面开发的模式,使构建 Web 应用变得简单高效。 在 ASP.NET Web 窗体中,可以从可重用的 UI 控件快速撰写网页。 用户交互自然作为事件进行处理。 微软及其他控件供应商提供的 Web 窗体 UI 控件具有丰富的生态系统。 这些控件可简化连接数据源的过程,并展示丰富的数据信息可视化。 对于偏好视觉设计的人来说,Web 窗体设计器提供了一个简单的拖放界面来管理控件。

多年来,Microsoft引入了新的 ASP。基于 NET 的 Web 框架,以解决 Web 发展趋势。 一些此类 Web 框架包括 ASP.NET MVC、ASP.NET 网页,以及最近 ASP.NET Core。 随着每一个新框架的出现,有些人预测 ASP.NET Web 窗体即将衰落,并批评它为陈旧的 Web 框架。 尽管有这些预测,但许多 .NET Web 开发人员仍会发现 ASP.NET Web 窗体是一种简单、稳定且高效地完成工作的方法。

撰写本文时,每月有近50万 Web 开发人员使用 ASP.NET Web 窗体。 ASP.NET Web 窗体框架稳定到十年前的文档、示例、书籍和博客文章仍然有用且相关。 对于许多 .NET Web 开发人员来说,“ASP.NET”仍然是“ASP.NET Web 窗体”的代名词,就像首次设想 .NET 时一样。 与其他新的 .NET Web 框架相比,关于 ASP.NET Web 窗体优缺点的讨论可能会持续进行。 ASP.NET Web 窗体仍然是创建 Web 应用的常用框架。

即便如此,软件开发方面的创新并没有放缓。 所有软件开发人员都需要了解新技术和趋势。 特别是值得考虑的两种趋势:

  1. 转向开放源代码和跨平台
  2. 将应用逻辑转移到客户端

开源和跨平台 .NET

当 .NET 和 ASP.NET Web 窗体首次发布时,平台生态系统看起来与现在大相径庭。 桌面和服务器市场由 Windows 主导。 其他平台(如 macOS 和 Linux)仍在努力获得吸引力。 ASP.NET Web 窗体随附 .NET Framework 作为仅限 Windows 的组件,这意味着 ASP.NET Web 窗体应用只能在 Windows Server 计算机上运行。 许多新式环境现在对服务器和开发计算机使用不同的平台,因此,对许多用户的跨平台支持是绝对要求。

大多数新式 Web 框架现在也是开放源代码,具有许多优势。 用户不依赖于单一项目的所有者来修复漏洞和新增功能。 开源项目为开发进度和即将进行的更改提供了改进的透明度。 开源项目享受来自整个社区的贡献,并培养了一个支持性的开源生态系统。 尽管开放源代码存在风险,但许多使用者和参与者都发现了适当的缓解措施,使他们能够以安全合理的方式享受开源生态系统的好处。 此类缓解措施的示例包括参与者许可协议、友好许可证、血统扫描和支持基础。

.NET 社区已接受跨平台支持和开放源代码。 .NET Core 是 .NET 的开放源代码和跨平台实现,可在大量平台上运行,包括 Windows、macOS 和各种 Linux 分发版。 Mono 是在 Android、iOS 和各种其他外形规格(包括手表和智能电视)上运行的 .NET 的开源版本。 2020 年,Microsoft发布了 .NET 5,该版本将 .NET Core 和 Mono 协调为“可在任何地方使用的单个 .NET 运行时和框架,并且具有统一的运行时行为和开发人员体验”。

ASP.NET Web 窗体是否会受益于迁移到开放源代码和跨平台支持? 不幸的是,答案是否定的,或者至少没有达到平台其余部分的程度。 .NET 团队 明确表示 ,ASP.NET Web 窗体不会移植到 .NET Core 或 .NET 8。 为什么会这样?

.NET Core 早期曾努力移植 ASP.NET Web 窗体。 结果发现所需的中断性变更数量过于庞大。 这里承认这一点,即使对于微软,它能够同时支持的 Web 框架数量也是有限的。 也许会有社区中的某人推动创建开放源代码、跨平台版本的 ASP.NET Web 窗体。 ASP.NET Web 窗体的源代码已在参考表单中公开提供。 但目前,似乎 ASP.NET Web 窗体将保持仅限 Windows 且没有开源贡献模型。 如果跨平台支持或开放源代码对你的方案非常重要,则需要查找新内容。

这是否意味着 ASP.NET Web 窗体 已死 ,不应再使用? 当然不是! 只要 .NET Framework 作为 Windows 的一部分提供,ASP.NET Web 窗体将是受支持的框架。 对于许多 Web 窗体开发人员来说,缺乏跨平台和开源支持是一个非问题。 如果不需要跨平台支持、开放源代码或是 .NET Core 或 .NET 8 中的任何其他新功能,那么可以在 Windows 上继续使用 ASP.NET Web Forms。 ASP.NET Web 窗体将继续是一种高效的方式来编写 Web 应用多年。

但是还有另一种值得考虑的趋势,那就是转向客户。

客户端 Web 开发

所有 。基于 NET 的 Web 框架(包括 ASP.NET Web 窗体)在历史上都有一个共同点:它们是 服务器呈现的。 在服务器呈现的 Web 应用中,浏览器向服务器发出请求,该服务器在 ASP.NET 应用中执行某些代码(.NET 代码)以生成响应。 该响应将发回浏览器进行处理。 在此模型中,浏览器用作精简呈现引擎。 生成 UI、运行业务逻辑和管理状态的辛勤工作发生在服务器上。

但是,浏览器已成为通用平台。 它们实现了越来越多的开放 Web 标准,这些标准授予对用户计算机功能的访问权限。 为什么不利用客户端设备的计算能力、存储、内存和其他资源? 当至少部分或完全在客户端进行处理时,UI 交互尤其可以受益于更丰富且更具交互性的外观。 应在服务器上处理的逻辑和数据仍然可以在服务器端处理。 可以使用 Web API 调用甚至实时协议(如 WebSocket)。 如果 Web 开发人员愿意编写 JavaScript,这些优势可供 Web 开发人员免费使用。 客户端 UI 框架(如 Angular、React 和 Vue)简化了客户端 Web 开发,并越来越受欢迎。 ASP.NET Web 窗体开发人员也可以通过使用客户端获益,甚至在集成的 JavaScript 框架(如 ASP.NET AJAX)中获得一些开箱即用的支持。

但是,桥接两个不同的平台和生态系统(.NET 和 JavaScript)的成本也随之而来。 在具有不同语言、框架和工具的两个并行世界中需要专业知识。 无法在客户端和服务器之间轻松共享代码和逻辑,从而导致重复和工程开销。 也很难跟上 JavaScript 生态系统,该生态系统具有快速演变的历史。 前端框架和生成工具首选项会快速更改。 该行业已经观察了从格鲁特到古尔普到 Webpack 等的进展。 前端框架(如 jQuery、Knockout、Angular、React 和 Vue)同样经历了快速而持续的发展变化。 但是,鉴于 JavaScript 的浏览器垄断,几乎没有选择余地。 也就是说,直到网络社区走到一起,并导致 奇迹 发生!

WebAssembly 满足了需求

2015年,主要浏览器供应商联合在 W3C 社区组中创建一个名为的新开放 Web 标准 WebAssembly。 WebAssembly 是 Web 的字节代码。 如果可以将代码编译为 WebAssembly,那么它可以在任何平台上的任何浏览器中以近乎本机的速度运行。 初步努力侧重于 C/C++。 结果是显著地实现了原生 3D 图形引擎不带插件直接在浏览器中运行的演示。 WebAssembly 此后,所有主要浏览器都已标准化和实现。

在 WebAssembly 上运行 .NET 的工作于 2017 年底宣布,并于 2020 年发布(支持 .NET 5 及更高版本)。 在浏览器中直接运行 .NET 代码的功能支持使用 .NET 进行全堆栈 Web 开发。

Blazor:使用 .NET 进行全堆栈 Web 开发

本身,在浏览器中运行 .NET 代码的功能不提供用于创建客户端 Web 应用的端到端体验。 这就是Blazor发挥作用的地方。 Blazor 是基于 C# 而不是 JavaScript 的客户端 Web UI 框架。 Blazor 可以直接通过 WebAssembly 在浏览器中运行。 不需要浏览器插件。 或者,Blazor 应用可以在 .NET 上的服务器端运行,并通过与浏览器的实时连接处理所有用户交互。

Blazor 在 Visual Studio 和 Visual Studio Code 中具有出色的工具支持。 该框架还包括完整的 UI 组件模型,并具有以下内置设施:

  • 窗体和验证
  • 依赖项注入
  • 客户端路由
  • 布局
  • 浏览器内调试
  • JavaScript 互操作

Blazor 与 ASP.NET Web 窗体有很多共同之处。 这两个框架都提供基于组件的、事件驱动的有状态 UI 编程模型。 主要的体系结构差异是,ASP.NET Web 窗体仅在服务器上运行。 Blazor 可以在浏览器中的客户端上运行。 但是,如果你来自 ASP.NET Web Forms 背景,那么 Blazor 中有许多内容会让你感到熟悉。 对于在寻找一种方法来利用客户端开发和 .NET 的开放源代码跨平台未来的 ASP.NET Web Forms 开发人员而言,Blazor 是一种天生的解决方案。

本书针对 ASP.NET Web 窗体开发人员,提供了关于 Blazor 的专门简介。 每个 Blazor 概念都出现在类似 ASP.NET Web 窗体功能和做法的上下文中。 到这本书结束时,你将了解:

  • 如何生成 Blazor 应用。
  • 工作原理 Blazor 。
  • Blazor 与 .NET 的关系是如何的。
  • 将现有 ASP.NET Web 窗体应用迁移到 Blazor 适当位置的合理策略。

Blazor 入门

入门Blazor非常简单。 https://blazor.net转到并按照链接安装相应的 .NET SDK 和Blazor项目模板。 你还将找到有关在 Visual Studio 或 Visual Studio Code 中设置 Blazor 工具的说明。