ASP.NET Core 配置系列一
ASP.NET Core 配置主要通过这3个文件设置:
1 项目文件也叫.csproj 文件
2 Program.cs
3 appsettings.json
这些配置告诉ASP.NET Core 应用程序基于用户的交互是如何工作的,在本节中我们理解ASP.NET Core 项目配置文件,我们创建一下空的项目模版
1 使用空模板创建项目
当你使用空模板创建一个项目时,自己手动做一些配置,这个过程有助于我们更好的理解内部的工作原理,包括:
1.1 添加Controllers,View&Models文件夹
1.2 添加appsettings.json文件
1.3 添加layouts,scripts 等
2 .csproj文件是什么
.csproj 是ASP.NET Core 的项目文件,它包含了SDK和ASP.NET Core 版本以及项目依赖的包等,在我们刚才创建的项目中,我们可以通过鼠标右击对.csproj文件进行编辑在.NET 7 中,初始化的.csproj 文件如下:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> </Project>
你可以使用csproj把NuGet包安装到你的ASP.NET Core项目,你只需要在csproj文件中指定引用包,Visual Studio会为你下载包,通常你如果从csproj文件中移除包,Visual Studio会将包从你应用程序移除
Json.NET 是一款针对.NET高性能的Json包,使用它来序列化和反序列化JSON, 我们在.csproj文件中引用这个包会为我们添加一个ItemGroup和PackageReference
一旦你保存了csproj文件,VS就会从NuGet下载这个包并将其安装到你的项目中
2.1 csproj文件元素
元素 |
描述 |
Project | 根元素,Sdk属性表示使用Microsoft.NET.Sdk.Web包构建应用程序 |
PropertyGroup | 针对Property属性进行分组 |
TargetFramework | 当构建项目时指示.NET 使用的版本号 |
ItemGroup | 对Item进行分组 |
PackageReference | 指定依赖的NuGet包,例如-Microsoft.AspNetCore.All提供了针对ASP.NET Core和MVC访问的单个包 |
2.2 使用NuGet Package Manager安装包
NuGet Package Manager 是vs中一个包管理工具,通过一些简单的接口可以实现NuGet包的管理,选择 Tools ➤ NuGet Package Manager ➤ Manage NuGet Packages 针对你项目(也可以选择解决方案,会让你选择安装到具体项目), 点击Browse页在文本框中输入包的名称,当你看到搜索包的List时,选择它并点击Install按钮
在下面图片中我已经搜索Json.NET并且选择和安装它
我们也可以通过Package Manager Console安装package,具体过程如下:在VS中选择Tools->NuGet Package Manager->Packages Manager Console输入下面命令安装JSON.NET包
Install-Package Newtonsoft.Json
3 .NET Core Kestrel Server
Kestrel是一个开源,跨平台Web,高性能的服务器,它可以宿主ASP.NET 应用程序在任何平台上(Windows,Linux,macOS),当ASP.NET Core应用程序使用IIS时它会被自动使用,你可以单独使用Kestrel或者使用一个反向代理服务器,例如"IIS,Nginx或者Apache",反向代理服务从互联网接受HTTP请求并且经过原始处理后转发给Kestrel
Visual Studio 默认使用Kestrel,你也可以从绿色箭头的下拉框中选择"https"来完成,然而你也可以使用另外一些宿主模型例如IIS Express
为了使用IIS express 运行你的应用程序,你需要在Visual Studio绿色箭头旁边点击下拉框并且选择“IIS Express”,如下图所示
4 ASP.NET Core Program 类
Program类是ASP.NET Core 应用程序的一个入口点,它位于应用程序的根目录下,它定义了.NET Core应用程序所需的服务和中间件组件
Program类默认代码如下:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();
在上面代码中使用了预先的设置来配置应用程序,像提供程序、Web宿主环境等,接下来Build()函数构建应用程序,如果没有发生错误它将运行在浏览器中
app.MapGet("/",()=>"Hello World") 在浏览器中简单显示"Hello World!"
4.1 注册服务和配置请求管道
Program.cs用于在应用程序上注册不同的服务,以便可以使用它们,我们在Programe类中注册的一些常用预定义服务包括:
AddControllersWithViews –> 在应用程序中添加Controllers、API关联特性、视图的服务,AddRazorPages –> 添加Razor Pages 服务,AddDbContext –>注册DBContext,使用的Entity Framework Core 服务AddDefaultIdentity –> 为应用程序注册 Identity 服务下面代码注册了两个服务-AddControllersWithViews和AddRazorPages
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();
在Program.cs 类中,我们也能对ASP.NET Core应用程序配置HTTP请求管道,通过添加中间件来配置请求管道,常用的有:
UseDeveloperExceptionPage -> 添加异常处理中间件, 当应用程序出现未处理的异常时该中间件用来显示开发模式下异常的详细信息,该中间件用在开发环境中
UseExceptionHandler –> 添加异常处理中间件,该中间件用来捕获异常和日志,使用在生产环境中UseHsts –> 添加HSTS中间件,HSTS 是 HTTP 严格传输安全(HTTP Strict Transport Security)的缩写UseHttpsRedirection –> 添加https跳转中间件,该中间件强制所有的http请求跳转到httpsUseStaticFiles –> 添加静态文件中间件,该中间件启用静态文件服务UseRouting –> 添加路由中间件,该中间件将请求匹配到终结点UseAuthorization –> 添加Authorization 中间件UseAuthentication –> 添加 Authentication 中间件UseEndpoints –> 添加路由终结点中间件,该中间件执行匹配的终结点MapControllerRoute –> 添加路由中间件匹配进入的url请求并且映射他们到actions方法
在你的应用程序中添加所有需要的服务和中间件,如下图所示:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
总结
这节我们主要介绍了ASP.NET Core基础模版、csproj文件、Kestrel Server以及Program类
源代码地址 :https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/Fundamentals/AspNetCore.Configuration/AspNetCore.Configuration