本文章翻译自微软官方文档: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/?view=aspnetcore-7.0&tabs=windows
目录
ASP.NET Core基础知识概述(一)
ASP.NET Core基础知识概述(二)
ASP.NET Core基础知识概述(三)
本篇文章概述了创建 ASP.NET Core应用的基础知识,包括依赖注入(DI)、配置、中间件等等。
Program.cs
使用web模板创建的ASP.NET Core应用包含Program.cs文件,应用程序启动的相关代码在Program.cs文件中。Program.cs文件位于:
- 已配置应用所需的服务
- 被定义为一系列中间件组件的应用请求处理管道
以下应用启动代码支持:
Razor Pages
MVC controllers with views
Web API with controllers
Minimal web APIs
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.Run();
依赖注入(服务)
ASP.NET Core包含了在整个应用中可提供配置的服务的依赖注入(DI).服务通过使用以上代码中的WebApplicationBuilder.Services、builder.Services加入到DI容器,当WebApplicationBuilder实例化后,会添加很多框架提供的服务。在下面代码中的builder即是WebApplicationBuilder :
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
在上面的第一行代码中,builder 已经将配置、日志和其他许多服务添加到Di容器中。
在以下代码中将Razor Pages、包含视图的MVC控制器及自定义DbContext等服务添加至DI容器中。
using Microsoft.EntityFrameworkCore;
using RazorPagesMovie.Data;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext")));
var app = builder.Build();
通常使用构造函数注入从DI解析服务。DI框架在运行时提供此服务的实例。
以下代码使用构造函数注入从DI解析数据库上下文和日志服务:
public class IndexModel : PageModel
{
private readonly RazorPagesMovieContext _context;
private readonly ILogger<IndexModel> _logger;
public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
{
_context = context;
_logger = logger;
}
public IList<Movie> Movie { get;set; }
public async Task OnGetAsync()
{
_logger.LogInformation("IndexModel OnGetAsync.");
Movie = await _context.Movie.ToListAsync();
}
}
Middleware(中间件)
请求处理管道由一系列中间件组件组成。每个组件在 HttpContext 上执行操作,调用管道中的下一个中间件或终止请求。
通常地,通过调用Use{Feature} 扩展方法向管道中添加中间件组件。在以下代码中中间件被添加到应用中:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthorization();
app.MapGet("/hi", () => "Hello!");
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.Run();
Host(主机)
ASP.NET Core应用在启动时会构建host,host封装应用的所有资源,比如:
- HTTP 服务器实现
- 中间件组件
- 日志(Logging)
- 依赖注入服务
- 配置(Configuration)
有三种可运行在 ASP.NET Core应用上的host:
- ASP.NET Core WebApplication
- .NET Generic Host
- ASP.NET Core WebHost
推荐使用WebApplication和WebApplicationBuilder ,并在所有模板中使用。WebApplication和.NET Generic Host 很相似并且有许多相同的接口,但是ASP.NET Core Web 主机仅用于支持后向兼容性。
以下示例将 WebApplication 主机实例化:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
var app = builder.Build();
WebApplicationBuilder.Build 方法使用一组默认选项配置主机,例如:
- 将 Kestrel 用作 Web 服务器并启用 IIS 集成。
- 从 appsettings.json、环境变量、命令行参数和其他配置源中加载配置。
- 将日志记录输出发送到控制台并调试提供程序。