重庆熊猫 Loading

ASP.NET Core教程-基础介绍(Basic)

更新记录
转载请注明出处:
2022年10月30日 发布。
2022年10月28日 从笔记迁移到博客。

ASP.NET Core基础

ASP.NET Core介绍

Web Framework created by Microsoft for building Web Applications, APIs, and Microservices。ASP.NET Core 框架的前身是 ASP.NET 框架。

注意:ASP.NET Core 不再基于 System.Web.dll。

ASP.NET Core特点

开源免费、跨平台、模块化、内置依赖注入、轻量级的Web框架。

ASP.NET Core官方网站

官方网站 https://dotnet.microsoft.com/
代码库 https://github.com/dotnet/aspnetcore

ASP.NET Core构成

说明

Platform(平台) + Application Frameworks(应用框架) + Utility Frameworks(实用功能框架)

Platform 用于定义框架底层的功能
Application Frameworks 用于创建具体的应用
Utility Frameworks 用于提供应用的辅助功能

image

Platform(平台)组成

Startup(启动)
HTTP Server(内置HTTP服务器)
URL Routing(路由)
Middleware (中间件)、Request Pipeline (请求管线)
Dependency Injection(依赖注入)
Services(服务)
Configuration(配置)
Exception(错误处理)
Logging(日志)
Caching(缓存)
Model Binding(模型绑定)
Razor(视图模板引擎)
gRPC
SignalR

.NET Core提供了一组内置的组件来帮助开发者实现一个应用程序的基本功能,如依赖注入、配置、选项、日志等,这些组件以Microsoft.Extensions为前缀。

image

Application Frameworks(应用框架)组成

ASP.NET Core MVC Framework(WebAPI、MVC)

ASP.NET Core Razor Pages

ASP.NET Core Blazor

Windows Forms

WPF

Utility Frameworks(功能框架)组成

Entity Framework Core

ASP.NET Core Identity

ASP.NET Core Technology Stacks 图

image

ASP.NET Core应用程序的启动

说明

当ASP.NET Core应用程序启动时

首先会配置并创建宿主(Host)类型,然后运行宿主

宿主用来启动、初始化应用程序,并管理其生命周期

image

Program.cs

Program.cs中定义了Program类

Program类是ASP.NET Core应用程序的入口

启动一个流程来处理Web请求和流程

可以运行不同类型的宿主进程,因此建议的模式是运行通用宿主进程

然后进一步对其进行自定义以指定它是Web宿主进程

具体表现为:

类似Console应用程序,Program类包括一个名为Main的静态方法

当程序运行时,将从这个方法开始执行

在Program类中的CreateDefaultBuilder()方法创建默认配置

实例化WebHostBuilder类并使用默认的配置(pre-configured defaults)

默认的配置包括Hosting、Configurations、Logging

注意:ASP.NET Core应用程序本质上就是控制台应用程序

以下是Program.cs的内容:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Main静态方法和CreateHostBuilder静态方法调用过程

在Main静态方法中,调用了静态方法CreateHostBuilder

CreateHostBuilder静态方法返回IHostBuilder子类的实例对象

在Main方法中调用它的Build方法得到IHost子类的实例对象

然后调用该实例对象的Run方法运行

提示:

和Run类似的还有Start方法,两个方法都会启动当前宿主

不同的是,Run以阻塞的方式运行宿主,Start则不是

CreateHostBuilder静态方法详解

在CreateHostBuilder静态方法内部

调用IHost类静态方法CreateDefaultBuilder,使用默认的配置项来初始化类的实例

会返回IHostBuilder类型的实例对象,该对象具有一些默认设定的值

再调用ConfigureWebHostDefaults方法,来修改默认的配置项

然后在方法内容调用UseStartup方法使用具体的Startup类文件

来配置应用程序的启动具体信息

由CreateDefaultBuilder方法创建IHostBuilder对象时所包含的默认配置项如下:

\1. 设置Web服务器

配置Kestrel服务器作为默认Web服务器来负责处理Web请求与响应

\2. 配置应用程序的内容目录

使用当前目录作为应用程序的内容目录(ContentRoot)

内容目录决定了ASP.NET Core查找内容文件(如MVC视图等)的位置

\3. 加载配置项

从以ASPNETCORE_开头的环境变量(如ASPNETCORE_ENVIRONMENT)、

appsettings.josn、appsettings.{Environment}.json、环境变量、命令行参数

等位置加载应用自定义配置

\4. 配置日志

默认添加控制台输出与调试输出

如果应用程序被托管在IIS中,将启动IIS集成

会配置应用程序的主机地址和端口

并允许捕获启动错误等

要查看Host相关代码,查看https://github.com/aspnet/AspNetCore,并在查找WebHostBuilder.cs文件即可

Startup类

说明

Startup类定义在Startup.cs文件中

IHostBuilder接口有多个扩展方法,其中有一个很重要的是UseStartup 泛型方法

UseStartup泛型方法主要向应用程序提供用于配置启动的类

其泛型参数通常是预定义的Startup类。这个类应具有以下两个方法:

ConfigureServices: 用于向ASP.NET Core配置服务、服务注入依赖容器

Configure: 用于添加中间件,配置请求管件

两方法都会在应用运行时被调用,且在应用程序整个生命周期内只执行一次

其中ConfigureServices方法是可选的,而Configure方法则是必须的

在程序启动时,会执行ConfigureServices方法(如果有)

将指定的服务放入应用程序的依赖注入容器中

然后再执行Configure方法,向请求管道中添加中间件

当在ConfigureServices方法中向依赖注入容器添加了服务后

在Configure方法中就可以使用服务

Startup.cs在ASP.NET Corec程序中的位置

image

ConfigureServices方法

ConfigureServices方法有一个IServiceCollection类型的参数

使用它能够将应用程序级别的服务注册到ASP.NET Core默认的依赖注入容器中

public void ConfigureServices(IServiceCollection services)
{

}

Configure方法

Configure方法默认包含一个IApplicationBuilder类型的参数

通过它可以添加一个或多个中间件

所有添加的中间件将对传入的HTTP请求进行处理

并将处理后的结果返回为发起请求的客户端

一旦在ConfigureServices方法中注册了服务,便会调用Configure来建立请求管道

请求管道可以由多个中间件组件构成

这些中间件组件接收请求并对其执行某些操作

根据创建多个中间件组件的方式

这将影响它们在什么阶段/什么顺序参与请求以及它们将如何影响请求(如果有的话)

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{

}

中间件与Configure关系图

image

在Host中注入服务

除了可以在Startup类型中注入服务

还可以在Program.cs中的Host类中注入依赖

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            //在这里注入依赖服务
            .ConfigureServices((services) =>
            {

            });
}

Kestrel Web 服务器

说明

轻量级、托管的、开源、跨平台的Web服务器

ASP.NET Core包含Kestrel

使ASP.NET Core程序能运行在任何平台(如Windows、Linux)上

Kestrel作用

Kestrel作为Web服务器

当Kestrel作为ASP.NET Core的Web服务器时

会在ASP.NET Core的进程内(InProcess)运行

Kestrel服务器直接处理HTTP请求与响应

并负责监听HTTP请求以及对每一次的请求返回HTTP响应

注意:Kestrel与应用程序代码间使用HttpContext对象进行交互

image

Kestrel作为反向代理服务器(Reverse Proxy Server)

实际生产环境中,Kestrel大多作为反向代理服务器使用

使用主流Web服务器(如IIS和Nginx等)放在Kestrel前做反向代理服务器

image

使用反向代理的好处:

增加了应用程序的安全性

提供负载均衡、过滤请求和URL重定向等功能

注意:

除了Kestrel作为服务器外,还可以使用HTTPSys

这两个都是ASP.NET Core内建的服务器

HTTPSys只能运行在Windows平台上

但HTTPSys有Kestrel不具有的特性,如Windows认证和端口共享等

环境配置补充

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments

posted @ 2022-10-30 08:34  重庆熊猫  阅读(980)  评论(0编辑  收藏  举报