`ASP.NET Core`是微软提供的强大的`web`框架,它有很多潜在的强大而有用的功能。 有了本专栏的指引,你将把框架的隐藏能力最大限度地发挥出来;你将能够按需定制ASP NET Core框架。本专栏提供了一种具体的操作和实现方法,可以让你在短时间尽可能地提高效率。 ## `ASP.NET Core`架构概览 接下来,我们将介绍`ASP.NET Core`的基础架构及其组件。这专栏讨论了架构的几乎所有组成部分。 下图显示了`ASP.NET Core 6.0`的基础架构,让我们从下往上快速浏览一下: ![](https://img.kancloud.cn/a2/a9/a2a9d08b29c96c9d77592b5ef8720ea1_607x238.png) 底部是`Host`层,它是引导`web`[服务和启动ASP.NET](http://xn--ASP-4w2e9a37qusag89i.NET) Core所需的所有的东西,包括日志记录、配置和服务提供者(`service provider`),这些对象都是上层需要的依赖项。 `Host`层之上是中间件层。该层负责处理请求对象,比如错误处理、权限控制、HSTS、CORS等等。 此外,还有路由层,它根据定义的路由模式将请求路由到端点`endpoints`。端点路由是NET Core的新层,它将路由与上面的UI层分离,以支持不同端点的路由,包括`Blazor`、`gRPC`和`Signal`。 > 提醒:在`ASP.NET Core`的早期版本中,路由是MVC层的一部分,其他每个UI层都需要实现自己的路由。 实际端点由第四层UI层提供,该层包含著名的UI框架`Blazor`、`gRPC`、`SignalR`和`MVC`。[作为ASP.NET](http://xn--ASP-c88dv5c.NET) Core开发人员,这里是你主要编码的地方。 最后,在`MVC`上面,您将看到`WebAPI`和`Razor`页面。 ## 专栏涵盖的内容 本专栏并未涵盖架构概述中提到的所有主题。本书涵盖了`Host`层的大部分主题,因为`Host`层包含了您可能需要定制的大部分内容。本专栏讨论了中间件和路由,以及MVC特性和一些更多的WebAPI主题,在这些主题中你可以做一些魔性化定制。 在每篇的开头,我会提示主题的难度级别。 ## 专栏未涵盖的内容 专栏不包括`Razor Pages`、`Signal`、`gRPC`和`Blazor`。 原因是`gRPC`和`Signal`已经非常专业化,不需要定制。`Blazor`[是ASP.NET](http://xn--ASP-888f.NET) Core的新成员,虽然尚未广泛使用。此外,笔者本身对`Blazor`还不够熟悉,不知道定制`Blazor`的所有细节。`Razor`页面位于MVC框架之上,MVC的定制也适用于`Razor`页面。 ## 专栏的阅读对象 本书面向使用`ASP.NET Core`的web开发人员,他们可能需要更改框架的默认行为才能完成任务。读者应具备`ASP. NET Core`的基本知识,因为本专栏没有介绍这些技术的基础知识。读者还应该对`Visual Studio`、`Visual Studio Code`或任何其他支持`ASP.NET Core`和`C#`的代码编辑器有很好的了解。 ## 专栏涵盖的章节 第1篇:“自定义日志记录”,介绍如何自定义日志记录行为以及如何添加自定义日志记录提供程序。 第2篇:自定义应用程序配置,帮助您了解如何使用不同的配置源和添加自定义配置提供程序。 第3篇:定制依赖注入,介绍依赖注入(`DI`)如何工作,以及如何使用不同的`DI`容器。 第4篇:用`Kestrel`配置和定制`HTTPS`,探讨如何以不同的方式配置`HTTPS`。 第5篇:配置`WebHostBuilder`,帮助您了解如何在托管层上设置配置。 第6篇:使用不同的托管模型,介绍在不同平台上使用不同类型的托管。 第7篇:使用`IHostedService`和`BackgroundService`,让您了解如何在后台执行任务。 第8篇:编写定制中间件,探讨使用中间件的`HTTP`上下文。 第9篇:“端点路由”,介绍如何使用新路由提供自定义端点。 第10篇:定制`ASP.NET Core`的`Identity`,介绍如何扩展应用程序的用户属性,并帮助您更改`Identity UI`。 第11篇:配置`Identity`(身份管理),帮助您管理用户及其角色。 第12篇:使用自定义`OutputFormatter`的`Content Negotiation`(内容协商),介绍如何基于`HTTP Accept`头输出不同的内容类型。 第13章,使用自定义`ModelBinder`管理输入,帮您创建具有不同内容类型的输入模型。 第14章,创建自定义`ActionFilter`,介绍如何使用`ActionFilter`的面向切面编程。 第15章,使用缓存,帮助您提高应用程序的性能。 第16章,创建自定义`TagHelper`,通过创建`TagHelper`简化您的UI层。 ## 技术准备 读者应具备`ASP.NET Core`的基本知识,以及`Visual Studio`、`Visual Studio Code`或任何其他支持`ASP.NET Core`代码编辑器。 安装最新的`NET 6.0 SDK`。请在以下[网址](https://dotnet.microsoft.com/download/dotnet-core/)查找最新版本。 使用任何支持`ASP NET Core`的代码编辑器。我们建议使用`Visual Studio Code`([网址](https://code.visualstudio.com)),因为它可在所有平台上使用。 专栏中的所有项目都将使用控制台、命令提示符、`shell`或`PowerShell`创建。不建议使用`Visual Studio`创建项目,因为基本配置可能会被更改。 除了`NET 6.0`,理论上也支持`NET Core 3.1`或`NET 5.0`,有些章节介绍了NET 6.0和5.0的些许差异。 ## 下载示例代码 您可以从`GitHub`[](https://github.com/PacktPublishing/Customizing-ASP.NET-Core-6.0-Second-Edition)下载本书的示例代码([网址](https://github.com/PacktPublishing/Customizing-ASP.NET-Core-6.0-Second-Edition))[](https://github.com/PacktPublishing/Customizing-ASP.NET-Core-6.0-Second-Edition)。 ## 下载彩色图片 我们还提供了一个PDF文件,其中包含本书中使用的截图和彩色图像,你可以在这里[下载](https://static.packt-cdn.com/downloads/9781803233604_ColorImages.pdf)。