ASP.NET Core学习笔记

ASP.NET Core

教程:https://www.bilibili.com/video/BV1Kk4y117Xy/?p=2&spm_id_from=pageDriver&vd_source=34dc5215532143d76607ef8957c72691 的笔记

ASP.NET Core 启动流程

ASP.NET Core Web 应用程序最初作为控制台应用程序启动,Main() 方法是应用程序的入口点。因此,当我们执行ASP.NET Core Web应用程序时,首先它寻找 Main() 方法,这是执行开始的方法。然后,Main()方法将ASP.NET配置并启动它。此时,应用程序将成为ASP.NET Core Web应用程序。

在.Net5中,用户配置在startup.cs中,.Net6之后所有都在program.cs中了。

image-20230713165651979

ConfigureServices() 方法配置应用程序所需的服务。Startup 类的Configure() 方法设置应用程序的请求处理管道。

Program.cs 是启动服务,加载配置的。

image-20230713170223154

CreateDefaultBuilder() 方法执行的任务是什么?

作为设置 Web 主机的一部分,CreateDefaultBuilder() 方法执行几项操作。其中一些如下:

  1. 设置 Web 服务器
  2. 从各种配置源加载主机和应用程序配置
  3. 配置日志记录

ASP.NET Core 托管模型

  1. InProcess(进程内托管)

    1. 它只有一个服务器,IIS或者内置服务器kestrelimage-20230713174627307
  2. OutOfProcess(进程外托管)

    1. 有两个服务器,一个是内部服务器(kestrel),一个外部服务器(IIS,Nginx)。

    image-20230713174654886

IIS 和 kestrel的区别:

1. kestrel是一个轻量级的服务器版本,针对我们开发的时候优化过的一个版本,**在实际生产中,往往使用IIS服务器**

IIS(Internet Information Services)和 Kestrel 是用于托管 ASP.NET Core 应用程序的两种不同的 Web 服务器。

  1. IIS(Internet Information Services):

    • IIS 是 Microsoft 提供的用于 Windows 操作系统的 Web 服务器软件。
    • IIS 具有强大的功能和广泛的配置选项,可以用于托管多种类型的应用程序,包括 ASP.NET、Classic ASP、PHP 等。
    • IIS 支持多个协议(如 HTTP、HTTPS、FTP 等)和各种身份验证和授权机制。
    • IIS 可以与其他 Microsoft 产品和服务(如 Active Directory、SQL Server 等)进行集成,提供更多的功能和扩展性。
    • IIS 可以作为前端代理,将请求转发给其他后端服务器(如 Kestrel)进行处理。
  2. Kestrel:

    • Kestrel 是 ASP.NET Core 的跨平台、轻量级的 Web 服务器,使用 C# 编写。
    • Kestrel 的设计目标是高性能和可扩展性,在处理大量并发请求时表现出色。
    • Kestrel 可以作为主机独立运行,也可以与其他反向代理服务器(如 Nginx、Apache 等)配合使用。
    • Kestrel 默认情况下不支持一些高级功能(如 HTTPS、虚拟主机等),但可以通过与其他服务器(如 Nginx)结合使用来实现这些功能。

主要区别:

  • IIS 是 Microsoft 提供的全功能 Web 服务器,适用于 Windows 操作系统,支持多种应用程序类型和功能,具有广泛的配置选项和集成能力。
  • Kestrel 是 ASP.NET Core 的内置 Web 服务器,跨平台运行,专注于高性能和可扩展性,适用于轻量级应用程序。
  • 在生产环境中,通常将 IIS 作为反向代理服务器,将请求转发给 Kestrel 进行处理,以充分发挥它们各自的优势。

值得注意的是,ASP.NET Core 应用程序可以在 IIS 上托管,同时使用 IIS 作为反向代理服务器和 Kestrel 作为应用程序的主机。这种配置结合了 IIS 的功能和 Kestrel 的性能优势。

ASP.NET Core 启动配置

打开launchSettings.json 文件后,默认情况下,您将找到以下代码。

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:1118",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApplication4": {
      "commandName": "Project",
      "dotnetRunMessages": "true",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

如果选择 IIS Express,则它将使用 IIS 服务器,如果您选择 WebApplication4 应用程序,则它将使用 Kestrel 服务器。
launchSettings.json文件的 commandName 属性的值可以是以下任何一个:

  1. IISExpress
  2. IIS
  3. Project
    launchSettings.json文件的commandName属性值以及应用程序项目文件中的AspNetCoreHostingModel元素值将确定将要使用和处理传入HTTP请求的内部和外部Web服务器(反向代理服务器)。 为了更好地理解,请看下图。

img

ASP.NET Core StartUp类

.Net 6 之前 ASP.NET Core必须包含Startup类。它就像 Global.asax 文件,我们传统的 .NET 应用程序。如名称建议的那样,在应用程序启动时首先执行它。在程序类的Main方法中配置主机时,可以使用UseStartup()扩展方法配置启动类。请查看下面的程序类,并重点介绍 WebBuilder.UseStartup() 方法。

image-20230713193739138

img

如上面在代码中看到的,Startup类包含两个公共方法:ConfigureServices和Configure。 Startup类必须包含Configure方法,并且可以选择包含ConfigureService方法。

ConfigureServices()方法

依赖注入模式在ASP.NET Core体系结构中大量使用。它包括内置的IoC容器,以使用构造函数提供相关的对象。
在ConfigureServices方法中,可以使用内置IoC容器注册依赖类。
注册依赖类后,可以在应用程序中的任何位置使用它。您只需要在要使用它的类的构造函数的参数中包含它即可。 IoC容器将自动注入它。
ASP.NET Core将依赖类称为服务。因此,每当您阅读“服务”,然后将其理解为将在其他一些类中使用的类。
ConfigureServices方法包含IServiceCollection参数,以将服务注册到IoC容器。
例如,如果要将RazorPages服务或MVC服务添加到asp.net核心应用程序,则需要将这些服务添加到该方法接受的参数中,如下图所示。
img

Configure()方法

在Configure方法中,我们可以使用内置IoC容器提供的IApplicationBuilder实例为asp.net核心应用程序配置应用程序请求管道。
ASP.NET Core引入了中间件组件来定义请求管道,该管道将在每个请求上执行。 您仅包括应用程序所需的那些中间件组件,从而提高了应用程序的性能。
带有Empty模板的ASP.NET Core应用程序的默认配置方法包括以下三个中间件,如下图所示。
img

访问配置的默认顺序是什么?

为同一键读取各种配置源的默认顺序如下:

  1. appsettings.json,
  2. appsettings.{Environment}.json
  3. 用户设置
  4. 环境变量
  5. 命令行参数
    如您所见,Program类的Main()方法调用CreateHostBuilder()方法。 然后,CreateHostBuilder()方法在Host类上调用CreateDefaultBuilder()方法。
    此CreateDefaultBuilder()方法是设置读取所有配置源的默认顺序的方法。
    如果需要,还可以更改此默认顺序,或者即使您愿意,也可以添加自己的自定义配置源以及现有的配置源。

ASP.NET Core 中间件

什么是ASP.NET Core Middleware?

ASP.NET Core中间件组件是被组装到应用程序管道中以处理HTTP请求和响应的软件组件(从技术上来说,组件只是C#类)。
ASP.NET Core应用程序中的每个中间件组件都执行以下任务。

  • 选择是否将 HTTP 请求传递给管道中的下一个组件。这可以通过在中间件中调用下一个 next() 方法实现。
  • 可以在管道中的下一个组件之前和之后执行工作。

在ASP.NET Core中,已经有很多内置的中间件组件可供使用,您可以直接使用它们。 如果需要,还可以在ASP.NET Core应用程序中创建自己的中间件组件。
您需要牢记的最重要的一点是,在ASP.NET Core中,给定的中间件组件应仅具有特定目的,即单一职责。

在ASP.NET Core应用程序中使用中间件组件的一些示例如下:

  • 用于验证用户身份的中间件
  • 中间件可用于记录请求和响应
  • 用于处理错误的中间件
  • 用于处理静态文件,例如图像,Javascript或CSS文件的中间件
  • 用于在访问特定资源时授权用户的中间件
    中间件组件是我们通常用于在ASP.NET Core应用程序中建立请求处理管道的组件。
    如果您使用过.NET Framework的早期版本,那么您可能知道,我们使用HTTP处理程序和HTTP模块来设置请求处理管道。 正是此管道将确定如何处理HTTP请求和响应。
posted @ 2023-07-16 20:22  追D  阅读(65)  评论(0)    收藏  举报