ASP.NET Core基础知识概述(一)

本文章翻译自微软官方文档: 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、环境变量、命令行参数和其他配置源中加载配置。
  • 将日志记录输出发送到控制台并调试提供程序。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容