13静态文件
默认情况下,静态文件(如 HTML、CSS、图像和 JavaScript)是 ASP.NET Core 应用直接提供给客户端的资产。
提供静态文件
静态文件存储在项目的 Web 根目录中。 默认目录为 {content root}/wwwroot,但可通过 UseWebRoot 方法更改目录。
采用 CreateBuilder 方法可将内容根目录设置为当前目录:
12345678910111213141516171819202122var builder = WebApplication.CreateBuilder(args);builder.Services.AddRazorPages();builder.Services.AddControllersWithViews();var app = builder.Build();if (!app.Environment.IsDevelopment()){ app.UseExceptionHandler("/Error"); app.UseHsts();}app.UseHtt ...
12发出HTTP请求
可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例。 IHttpClientFactory 的优势如下:
提供一个中心位置,用于命名和配置逻辑 HttpClient 实例。 例如,可注册和配置名为 github 的客户端,使其访问 GitHub。 可以注册一个默认客户端用于一般性访问。
通过 HttpClient 中的委托处理程序来编码出站中间件的概念。 提供基于 Polly 的中间件的扩展,以利用 HttpClient 中的委托处理程序。
管理基础 HttpClientMessageHandler 实例的池和生存期。 自动管理可避免手动管理 HttpClient 生存期时出现的常见 DNS(域名系统)问题。
(通过 ILogger)添加可配置的记录体验,以处理工厂创建的客户端发送的所有请求。
消耗模式
在应用中可以通过以下多种方式使用 IHttpClientFactory:
基本用法
命名客户端
类型化客户端
生成的客户端
基本用法
通过在 Program.cs 中调用 AddHttpClient 来注册 IH ...
11异常处理
开发人员异常页
“开发人员异常”页显示未经处理的请求异常的详细信息。 ASP.NET Core 应用在以下情况下默认启用开发人员异常页:
在开发环境中运行
使用当前模板创建的应用,即使用WebApplication.CreateBuilder。使用WebHost.CreateDefaultBuilder创建的应用必须通过在Configure中调用app.UseDeveloperExceptionPage来启用开发人员异常页。
开发人员异常页运行在中间件管道的前面部分,以便它能够捕获随后中间件中抛出的未经处理的异常。
开发人员异常页可能包含关于异常和请求的以下信息:
堆栈跟踪
查询字符串参数(如果有)
Cookie(如果有)
标头
异常处理程序页
若要为生产环境配置自定义错误处理页,请调用UseExceptionHandler.此异常处理中间件:
捕获并记录未经处理的异常
使用指示的路径在备用管道中重新执行请求。如果响应已启动,则不会重新执行请求。模板生成的代码使用**/Error**路径重新执行请求
如果备用管道引发了一个自身的异常,则异常处理中间件会重新引 ...
10路由
路由负责匹配传入的 HTTP 请求,然后将这些请求发送到应用的可执行终结点。 终结点是应用的可执行请求处理代码单元。 终结点在应用中进行定义,并在应用启动时进行配置。 终结点匹配过程可以从请求的 URL 中提取值,并为请求处理提供这些值。 通过使用应用中的终结点信息,路由还能生成映射到终结点的 URL。
应用可以使用以下内容配置路由:
Controller
Razor Pages
SignalR
gRPC
启用终结点的中间件,例如运行状况检查。
通过路由注册的委托和 Lambda。
路由基本知识
以下代码演示路由的基本示例:
123456var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.MapGet("/", () => "Hello World!");app.Run();
前面的示例包含使用 MapGet 方法的单个终结点:
当 HTTP GET 请求发送到根 URL / 时:
将执行请求委托。
Hello Wo ...
09HttpContext
HttpContext 封装了有关个别 HTTP 请求和响应的所有信息。 收到 HTTP 请求时,HttpContext 实例会进行初始化。 HttpContext 实例可通过中间件和应用框架(如 Web API 控制器、Razor Pages、SignalR、gRPC 等)访问。
HttpRequest
HttpContext.Request 提供对 HttpRequest 的访问。 HttpRequest 包含有关传入 HTTP 请求的信息,并在服务器收到 HTTP 请求时被初始化。 HttpRequest 不是只读的,中间件可以在中间件管道中更改请求值。
HttPRequest常用成员
properties
说明
示例
HttpRequest.Path
请求路径
/en/article/getstarted
HttpRequest.Method
请求方法
GET
HttpRequest.Headers
请求标头的集合
user-agent=Edge x-custom- header=MyValue
HttpRequest.RouteValues
...
08监视
运行状况检查
运行状况检查由应用程序作为 HTTP 终结点公开。 可以为各种实时监视方案配置运行状况检查终结点:
运行状况探测可以由容器业务流程协调程和负载均衡器用于检查应用的状态。 例如,容器业务流程协调程序可以通过停止滚动部署或重新启动容器来响应失败的运行状况检查。 负载均衡器可以通过将流量从失败的实例路由到正常实例,来应对不正常的应用。
可以监视内存、磁盘和其他物理服务器资源的使用情况来了解是否处于正常状态。
运行状况检查可以测试应用的依赖项(如数据库和外部服务终结点)以确认是否可用和正常工作。
运行状况检查通常与外部监视服务或容器业务流程协调程序一起用于检查应用的状态。 向应用添加运行状况检查之前,需确定要使用的监视系统。 监视系统决定了要创建的运行状况检查类型以及配置其终结点的方式。
基本运行状况探测
对于许多应用,报告应用在处理请求方面的可用性(运行情况)的基本运行状况探测配置足以发现应用的状态。
基本配置会注册运行状况检查服务,并调用运行状况检查中间件以通过运行状况响应在 URL 终结点处进行响应。 默认情况下,不会注册任何特定运行状况检查来测试任何特 ...
07日志
日志记录提供程序
日志记录提供程序存储日志,但显示日志的 Console 提供程序除外。 例如,Azure Application Insights 提供程序将日志存储在 Azure Application Insights 中。 可以启用多个提供程序。
默认 ASP.NET Core Web 应用模板调用 WebApplication.CreateBuilder,该操作将添加以下日志记录提供程序:
Console
Debug
EventSource
EventLog (仅限Windows)
下面的代码将重写由 WebApplication.CreateBuilder 添加的一组默认的日志记录提供程序:
LoggingConfigureLogging12345var builder = WebApplication.CreateBuilder(args);builder.Logging.ClearProviders();builder.Logging.AddConsole();123456var builder = WebApplication.CreateBuilde ...
06选项模式
选项模式使用类来提供对相关设置组的强类型访问。 当配置设置由方案隔离到单独的类时,应用遵循两个重要软件工程原则:
封装:依赖于配置设置的类仅依赖于其使用的配置设置
分离关注点:应用的不同部件的设置不彼此依赖或相互耦合
绑定分层配置
读取相关配置值的首选方法是使用选项模式。 例如,若要读取以下配置值,请执行以下操作:
appsettings.jsonPositionOptions通过Bind()方式通过Get()方式(推荐)123456{ "Position": { "Title": "Editor", "Name": "Joe Smith" }} 选项类:
必须是包含公共无参数构造函数的非抽象类。
类型的所有公共读写属性都已绑定。
字段不是绑定的。 在下面的代码中,Position 未绑定。 由于使用了 Position 字段,因此在将类绑定到配置提供程序时,不需要在应用中对字符串 “Posi ...
05配置
ASP.NET Core中的应用程序配置是使用一个或多个配置提供程序执行的。配置提供程序使用各种配置源从键值对读取配置数据:
配置文件,例如appsettings.json
环境变量
Azure Key Vault
Azure 应用配置
命令行参数
已安装或已创建的自定义提供程序
目录文件
内存中的.NET对象
应用程序和主机配置
ASP.NET Core 应用配置和启动“主机”。 主机负责应用程序启动和生存期管理。 ASP.NET Core 模板创建的 WebApplicationBuilder 包含主机。 虽然可以在主机和应用程序配置提供程序中完成一些配置,但通常,只有主机必需的配置才应在主机配置中完成。
默认应用程序配置源
1var builder = WebApplication.CreateBuilder(args);
WebApplication.CreateBuilder 使用预配置的默认值初始化 WebApplicationBuilder 类的新实例。 经过初始化的 WebApplicationBuilder (builder) 按照以下顺序为应用提供默 ...
04主机
配置相关
URL&Port
设置端口
Properties/launchSettings.json 文件,该文件指定应用响应的端口。或通过如下方式:
12345var app = WebApplication.Create(args);app.MapGet("/", () => "Hello World!");app.Run("http://localhost:3000");
设置多个端口
在以下代码中,应用响应端口 3000 和 4000。
12345678var app = WebApplication.Create(args);app.Urls.Add("http://localhost:3000");app.Urls.Add("http://localhost:4000");app.MapGet("/", () => "Hello World");app.Run();
从命令行设置端口
以下命令使应用响应端口 ...