ASP.NET CORE 基础知识(一):概述【下】
此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解
配置
ASP.NET Core提供了一个配置框架,其能够从一系列有序的配置提供器里获取以键值对形式来呈现的设置。ASP.NET Core对许多数据源提供了内建的配置提供器,比如.json文件,.xml文件,环境变量,以及命令行参数。除此之外,你也可以写自己的自定义的配置提供器。
举个例子,你可以指定配置来自于 appsettings.json 以及环境变量,那么当请求ConnectionString 的值的时候,框架会首先在appsettings.json 中进行查找,如果在 appsettings.json 以及环境变量中都找到了这个值,那么会优先考虑环境变量中的值。
为了管理比如密码这样的凭证配置数据,ASP.NET Core提供了Secret Manager tool。对于生产环境的密钥管理,我们推荐 Azure Key Vault。
获取更多信息,请参考 Configuration in ASP.NET Core。
选项
只要有可能的话,ASP.NET Core 遵从选项模式来存储和返回配置值。选项模式使用类来表示相关设置分组。
举个例子,下面的代码设置了WebSockets的选项:
var options = new WebSocketOptions
{
KeepAliveInterval = TimeSpan.FromSeconds(),
ReceiveBufferSize =
};
app.UseWebSockets(options);
获取更多信息,请参考 Options pattern in ASP.NET Core。
环境
执行环境,比如开发环境,脚手架,生产环境在ASP.NET Core中是第一类概念。你可以通过设置ASPNETCORE_ENVIRONMENT 环境变量来指定app正在运行其中的环境。在app启动时,ASP.NET Core读取了那个环境变量值,并且把值存储在一个IHostingEnvironment的实现中。通过DI,环境对象在app的任何地方都是可用的。
以下Startup 类中的示例代码配置app仅当运行在开发环境时才提供详细的错误信息:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
} app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseMvc();
}
更多信息,请参考Use multiple environments in ASP.NET Core。
日志
ASP.NET Core支持一个日志API,其可用与许多内建的和第三方的日志提供器一起协同工作。可用的日志提供器如下:
- Console
- Debug
- Event Tracing on Windows
- Windows Event Log
- TraceSource
- Azure App Service
- Azure Application Insights
通过DI获取一个ILogger对象并调用它的日志方法,我们便可以在app代码的任何地方添加日志。
这儿有一个使用ILogger对象的示例代码,构造函数注入及日志方法调用被高亮显示:
public class TodoController : ControllerBase
{
private readonly ILogger _logger; public TodoController(ILogger<TodoController> logger)
{
_logger = logger;
} [HttpGet("{id}", Name = "GetTodo")]
public ActionResult<TodoItem> GetById(string id)
{
_logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
// Item lookup code removed.
if (item == null)
{
_logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
return NotFound();
}
return item;
}
}
ILogger 接口允许你传递任何数量的字段给日志提供器,这些字段通常用来构造消息字符串,但是提供器也可以将它们作为分开的字段传递给数据存储器。这个特性使得对于日志提供器来说,实现semantic logging, also known as structured logging成为可能。
获取更多信息,请参考:Logging in .NET Core and ASP.NET Core。
路由
路由是一个URL模式,其被映射道相应的处理器中,一个典型的处理器是一个Razor页面,MVC控制器中的Action方法,或者是一个中间件。ASP.NET Core路由可以让你对app使用的URL进行控制。
获取更多信息,请参考 Routing in ASP.NET Core。
错误处理
ASP.NET Core具有内置的错误处理的特性,比如:
- 开发者异常页
- 自定义错误页
- 静态状态码页
- Startup异常处理
更多信息,请参考Handle errors in ASP.NET Core。
生成HTTP 请求
一个IHttpClientFactory 的实现可用来创建HttpClient的实例,此工厂可以:
提供一个中心化的位置来命名和配置逻辑HttpClient 实例。举个例子,一个github客户端可以注册并进行配置以访问Github。而一个默认的客户端可被注册用于其他目的。
支持注册以及多个委托处理器的链接以生成一个向外的请求中间件管道。这个模式有点类似于ASP.NET中的向内的中间件管道。这个模式提供了一种机制用来管理HTTP请求的相关概念,包含缓存,错误处理,序列化以及日志。
与Polly集成,它是一个流行的第三方库,其用来进行短期错误处理。
管理底层HttpClientMessageHandler实例的资源池及生命周期,以避免通常当手动管理HttpClient生命周期时发生的DNS问题。
为此工厂创建的客户端发送的请求添加可配置的日志体验。
获取更多信息,请参考Make HTTP requests using IHttpClientFactory in ASP.NET Core。
Content root
Content root是以下内容的基础路径(base path):
- 可执行程序(.exe)
- 组成程序的编译后的程序集(.dll)
- app使用的非代码类内容文件,比如 Razor 页面,配置文件,数据文件
- Web root,典型的是发布后的wwwroot 文件夹
在开发阶段:
- Content root默认为工程的根目录
- 工程的根目录用来创建:
项目根目录中应用程序非代码内容文件的路径
Web root,典型的便是项目根目录下wwwroot文件夹
当创建一个宿主时,可以指定一个可替换的Content root路径,更多信息,请参考.NET Generic Host, ASP.NET Core Web Host。
Web root
Web root是公开的,非代码静态资源文件的基础路径,比如:
- 样式表(.css)
- JavaScript (.js)
- 图片 (.png, .jpg)
默认情况下,只有Web root及其子文件夹会包含静态文件。
Web root路径默认为{content root}/wwwroot,但是当创建一个Host时候可以指定一个不同的web root。更多信息请参考NET Generic Host。
使用工程文件中的<Content> project item 来阻止将文件发布在wwwroot中。如下示例阻止将内容发布到及其子目录:
<ItemGroup>
<Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>
为了防止将静态身份断言发布到web root,请参考Introduction to Identity on ASP.NET Core。
在Razor文件中,'~/'指向了web root,以’~/‘开头的路径便是一个虚拟路径。
更多信息,请参考Static files in ASP.NET Core。
ASP.NET CORE 基础知识(一):概述【下】的更多相关文章
- ASP.NET Core 基础知识(三) Program.cs类
ASP.NET Framework应用程序是严重依赖于IIS的,System.Web 中有很多方法都是直接调用的 IIS API,并且它还是驻留在IIS进程中的.而 ASP.NET Core 的运行则 ...
- ASP.NET Core 基础知识(四) Startup.cs类
ASP.NET Core应用程序需要一个启动类,按照约定命名为Startup.在 Program 类的主机生成器上调用 Build 时,将生成应用的主机, 通常通过在主机生成器上调用 WebHostB ...
- ASP.NET CORE 基础知识(一):概述【上】
此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译.其中或许会添加本人对 ASP.NET Core 的浅显理解 原文请参考MSDN ASP.NET Core. 这篇文章是 ...
- ASP.NET Core 基础知识(一) ASP.NET Core是什么?与.NET Framework、Mono之间的关系 ?
一.概念: ASP.NET Core 是一个开源的.跨平台的 .NET 实现.而 .NET Framework 是基于 Windows 的 .NET 实现,Mono 是 .NET Framework ...
- ASP.NET Core 基础知识(五) 依赖关系注入
参考https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html 和 https://www.cnblogs.com/artech/p/net-c ...
- ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...
- ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...
- ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 EF SQLite 支持 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 EF SQLite 支持 上一章节我有提 ...
- ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 MVC 前面几章节中,我们都是基于 ASP.NET 空项目 ...
随机推荐
- Laravel 中使用 Laravel-Excel 美化
<?php use Maatwebsite\Excel\Classes\LaravelExcelWorksheet; use Maatwebsite\Excel\Exceptions\Larav ...
- 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL
这里是:一看就会,一做就废系列 数据库演示版本为 19.3 (12.2.0.3) 该系列涉及恢复过程中使用的 5 个语句: 1. recover database 2. recover databas ...
- qml-main.cpp中的两种启动Qt Quick App模式
现有两种启动Qt Quick App 模式: QQmlApplicationEngine搭配Window. QQuickView搭配Item. qt默认使用第一种方法. QQmlApplicati ...
- Python - isinstance()更深刻的理解
起因经过 今天翻collections.abc的文档时,我知道list的实例在逻辑上(因为duck typing 鸭子类型)是Container和不能hash的(因为list可变),就试下面的代码是否 ...
- umi ui 构建时出现 spawn sh ENOENT 报错的解决方法
在使用umi可视化界面构建项目的时候,如果出现spawn sh ENOENT错误,一般都是由于环境变量里没有设置git的环境变量导致的.在环境变量的path里加上"C:\Program Fi ...
- AAC DRC
DRC feature 在AAC decoder是optional.DRC info是在编码在fill element. Program reference level是进行DRC的一个参考值.是原始 ...
- 【C语言】复合函数求值
例子:求复合函数F(G(X)),其中F(x)=|x-3|+|x+1|,函数G(x)=x^2-3x. 分析:从复合函数的结构可以看出,F函数的自变量为G函数的绝对值,可以将F函数和G函数作为独立的函数实 ...
- 使用maven构建项目时,SSM和springboot项目的打包与云服务器部署
下面讲讲如何打包SSM和springboot项目,并部署到云服务器上. 由于使用的IDE不同,有的使用eclipse,有的使用idea,所以如果在IDE中按照 maven clean 再 maven ...
- 《Qt Quick核心编程》勘误
本文将结合章节和问题发现的先后顺序来编排,具体是酱紫的:每个章节单列出来作为本文的一节,在该节下按时间顺序列出发现的问题. 第4章 1). 51页第六行:“ iconName 属性定图标的名字”,其中 ...
- xshell 链接虚拟机
1.在虚拟机上添加网络适配器,选择仅主机模式 2. 2.启用本机的网络连接 3.在虚拟机上开启ssh服务 首先看下22端口有没开放,如果没有的话需要开启 service start sshd 4.在虚 ...