首页 > 编程语言 >ASP.NET Core学习笔记

ASP.NET Core学习笔记

时间:2023-07-16 20:33:58浏览次数:42  
标签:Core ASP IIS 中间件 应用程序 NET

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请求和响应。

标签:Core,ASP,IIS,中间件,应用程序,NET
From: https://www.cnblogs.com/chengbb/p/17558476.html

相关文章

  • ASP.NET Core Web API中操作方法中的参数来源
    在ASP.NETCoreWebAPI中,有多种方式可以传递参数给操作方法。以下是一些常见的参数传递方式:路由参数(RouteParameters):参数值从URL的路由中提取。//Route:api/users/{id}[HttpGet("api/users/{id}")]publicIActionResultGetUserById(intid){//使用id执行操作......
  • 【IP】vivado中IP核的Core Container特性
    一、XCI和XCIX格式文件在Vivado中生成IP核时,一般默认是对应的IP核文件夹会生成在工程目录的.srcs/sources_1/ip路径下。这个文件夹包含了所有与该IP核相关的文件,最主要的是XCI文件,其中包含了用户配置的相关信息。 Vivado还提供了CoreContainer特性,可以将所有与IP相关的文件......
  • 揭秘 .NET 中的 TimerQueue(上)
    前言TimerQueue是.NET中实现定时任务的核心组件,它是一个定时任务的管理器,负责存储和调度定时任务。它被用于实现很多.NET中的定时任务,比如System.Threading.Timer、Task.Delay、CancellationTokenSource等。笔者将用两篇文章为大家介绍TimerQueue的实现原理,本篇文章将以......
  • kubernetes之 dashboard展示
    第十一dashboard展示一直使用kubectl命令操作apiserver实现dashboard作为k8s核心附件存在的,官网部署:https://github.com/kubernetes/dashboard根据教程,还是安装老版本的镜像吧[root@k8s-masterdashboard]#kubectlapply-fhttps://raw.githubusercontent.com/kubernetes/dashb......
  • funcontain_network
    Function介绍、定义组织好的(提前写好内置)、可重复使用的、用以实现特定功能的代码段。str1="iloveu"str2="goodluck"str3="seeya"count=0foriinstr1:count+=1print(f"字符串{str1}的长度是{count}")#将for写三次分别对应str1、2、3重复的代码过多,......
  • dotnet 连接使用ef orm连接sqlite数据库的小demo
    EF6SQLiteTutorial/Program.csusingEF6SQLiteTutorial.Data;usingMicrosoft.EntityFrameworkCore;varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.builder.Services.AddControllers();//LearnmoreaboutconfiguringSwag......
  • dotnet ef的使用
    EntityFrameworkCore的使用如果您想要根据模型创建数据库表,可以使用EntityFrameworkCore的迁移功能。迁移允许您在模型更改时更新数据库架构,而无需手动创建或修改表。要使用迁移,您需要执行以下步骤:安装Microsoft.EntityFrameworkCore.Tools包,以便在命令行中使用dotnet......
  • .NET面试题系列(23)tcp粘包问题
    序言 什么是粘包所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。解决粘包问题的方法 资料tcp粘包问题......
  • .NET Native AOT的静态库与动态库
    .NET不仅可以使用C静态库与动态库,也可以将.NET实现的函数导出为C静态库与动态库。在没有NativeAot之前,.NET只能通过P/Invoke享受C/C++生态,而在NativeAot之后,不仅可以享受这些生态,还可以开发SDK供其他语言调用。.NETNativeAOT的NativeLib参数用于指定本机库的类型。在.NET7......
  • kubernetes之 RBAC
    第十一部分RBACrestful操作对象:许可授权都作用于角色,用户是什么角色,就拥有什么操作权限授权插件:Node、ABAC、RBAC、WebhookRBAC:Role-basedAC角色:Role许可:permission关联图示客户端访问示意图:role:operations:许可object:rolebinging:useraccountorserviceacco......