.NET CORE应用程序启动

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: ASP.NET Core 应用是在其 Main 方法中创建 Web 服务器的控制台应用:

ASP.NET Core 应用是在其 Main 方法中创建 Web 服务器的控制台应用:

Main 方法调用 WebHost.CreateDefaultBuilder,通过生成器模式来创建web主机.生成器提供定义 Web 服务器(例如,UseKestrel)和启动类 (UseStartup) 的方法。 在前面的例子中,自动分配了 Kestrel Web 服务器。ASP.NET Core 的 Web 主机尝试在 IIS 上运行(如果可用)。 对于其他 Web 服务器(如 HTTP.sys),可通过调用相应的扩展方法来使用。 在下一节对 UseStartup 进行了更深入的介绍。

IWebHostBuilder 是 WebHost.CreateDefaultBuilder 调用的返回类型,它提供了许多可选方法。 其中的一些方法包括用于在 HTTP.sys 中托管应用的 UseHttpSys ,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听 HTTP 请求。

WebHostBuilder 提供了许多可选方法,其中包括用于在 IIS 和 IIS Express 中进行托管的 UseIISIntegration,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听HTTP 请求。

Startup 类用于定义请求处理管道和配置应用所需的任何服务

ConfigureServices 定义应用所使用的服务(如 ASP.NET Core MVC、Entity Framework Core 和标识)。 Configure定义在请求管道中调用的中间件。

publicclass Startup {// This method gets called by the runtime. Use this method// to add services to the container.publicvoid ConfigureServices(IServiceCollection services) { }// This method gets called by the runtime. Use this method// to configure the HTTP request pipeline.publicvoid Configure(IApplicationBuilder app) { } }

  • 内容:如 Razor Pages、MVC 视图和静态资源
  • Web根:包含公共资源、CSS 等静态资源、JavaScript 和图形文件。
  • 依赖关系注入服务:服务是应用中常用的组件。 可以通过依存关系注入 (DI) 来获取服务。 ASP.NET Core 包括默认支持构造函数注入的本机控制反转 (IoC) 容器。 可根据需要替换默认容器。 DI 除了具备松散耦合优势以外,还可以使服务(例如日志记录)在整个应用中可用。
  • 中间件:在 ASP.NET Core 中,使用中间件来撰写请求管道。 ASP.NET Core 中间件在 HttpContext 上执行异步操作,然后调用管道中的下一个中间件或终止请求。按照惯例,通过在 Configure 方法中调用 UseXYZ 扩展方法,向管道添加名为“XYZ”的中间件组件。ASP.NET Core 包含一组丰富的内置中间件,你也可以编写自己的自定义中间件。 ASP.NET Core 应用中支持 .NET的开放 Web 接口 (OWIN),它将 Web 应用与 Web 服务器分离。
  • HTTP启动请求:IHttpClientFactory 可访问 HttpClient 实例以发出 HTTP 请求。
  • 环境:环境(如“开发”环境和“生产”环境)是 ASP.NET Core 的高级概念,可使用环境变量、设置文件和命令行参数进行设置。
  • ASP.NET Core 应用可配置和启动一个主机,负责应用启动和生存期管理。
  • 服务器:ASP.NET Core 托管模型不直接侦听请求。 托管模型依赖 HTTP 服务器实现将请求转发到应用。 转发的请求被打包为一组可通过接口进行访问的功能对象。 ASP.NET Core 包含托管的跨平台 Web 服务器,名为 Kestrel。 Kestrel通常在生产 Web 服务器(如反向代理配置中的 IIS 或 Nginx)后台运行。
  • 配置:基于名称/值对使用配置模型,不再是system.Configuration和web.config。配置从一组有序的配置提供程序获取设置。 内置配置提供程序支持各种文件格式(XML、 JSON、INI)、环境变量和命令行参数。 也可以编写你自己的自定义配置提供程序。
  • 日志记录:ASP.NET Core 支持适用于各种日志记录提供程序的日志记录 API。 内置提供程序支持向一个或多个目标发送日志。 可使用第三方记录框架。
  • 错误处理:ASP.NET Core 的内置方案可处理应用中的错误,包括开发人员异常页、自定义错误页、静态状态代码页和启动异常处理。
  • 路由
  • 文件处理
  • 静态文件
  • 会话和应用状态:ASP.NET Core 提供几种可在用户浏览 web 应用时保留会话和应用状态的方法。
  • 请求功能:与HTTP请求和响应相关的Web服务器实现详细信息在接口中定义,服务器实现和中间件使用这些接口来创建和修改应用的托管管道。
  • 后台任务:后台任务作为托管服务实现。 托管服务是一个类,具有实现 IHostedService 接口的后台任务逻辑。
  • WebSockets:WebSocket 是一个协议,支持通过 TCP 连接建立持久的双向信道。 它可用于聊天、股票报价和游戏等应用,以及Web 应用中需要实时功能的任何位置。 ASP.NET Core 支持 Web 套接字方案。

Statusup类配置服务和请求管道

Statusup类包括ConfigureServices方法以配置应用的服务.Configure方法以创建应用的请求处理管道

在 Startup 类中注入依赖关系的常见用途为注入:

  • IHostingEnvironment 以按环境配置服务。
  • IConfiguration 以读取配置。
  • ILoggerFactory 以在 Startup.ConfigureServices 中创建记录器。

privatereadonly IHostingEnvironment _env;         privatereadonly IConfiguration _config;         privatereadonly ILoggerFactory _loggerFactory;         public Startup(IHostingEnvironment env, IConfiguration config,         ILoggerFactory loggerFactory)         {             _env = env;             _config = config;             _loggerFactory = loggerFactory;         }

ConfigureServices方法

  • Optional
  • 在 Configure 方法配置应用服务之前,由 Web 主机调用。
  • 其中按常规设置配置选项。


调用所有Add{Service}方法,然后调用所有services.Configure{Service}方法。

将服务添加到服务容器,使其应用和Config方法中可用,这些服务是通过依赖关系注入或IApplicationBuilder.ApplicationServices 解析。

Configure方法


configure方法用于指定应用响应HTTP请求的方式。可通过将中间件组件添加到IApplicationBuilder实例来配置请求管道。Configure 方法可使用 IApplicationBuilder ,但未在服务容器中注册。 托管创建IApplicationBuilder 并将其直接传递到 管道  。

使用Use扩展方法将中间件组件添加到请求管道,

使用Startup筛选器扩展Startup

在应用的 Configure 中间件管道的开头或末尾使用 IStartupFilter 来配置中间件。 IStartupFilter 有助于确保

中间件在应用请求处理管道的开始或结束时由库添加的中间件之前或之后运行

 

IStartupFilter 实现单个方法(即 Configure),该方法接收并返回 Action<IApplicationBuilder> 。

IApplicationBuilder 定义用于配置应用请求管道的类。 有关详细信息,请参阅使用 IApplicationBuilder 创建中

间件管道。

在请求管道中,每个 IStartupFilter 实现一个或多个中间件。 筛选器按照添加到服务容器的顺序调用。 筛选

器可在将控件传递给下一个筛选器之前或之后添加中间件,从而附加到应用管道的开头或末尾。

IStartupFilter 实现单个方法(即 Configure),该方法接收并返回 Action<IApplicationBuilder> 。

IApplicationBuilder 定义用于配置应用请求管道的类。

IStartupFilter 在 IWebHostBuilder.ConfigureServices 中的服务容器中注册

中间件执行顺序由 IStartupFilter 注册顺序设置:

多个 IStartupFilter 实现可能与相同的对象进行交互。 如果顺序很重要,请将它们的 IStartupFilter 服

务注册进行排序,以匹配其中间件应有的运行顺序。

库可能添加包含一个或多个 IStartupFilter 实现的中间件,这些实现在向 IStartupFilter 注册的其他应

用中间件之前或之后运行。 若要在库的 IStartupFilter 添加中间件之前调用 IStartupFilter 中间件,请

在将库添加到服务容器之前定位服务注册。 若要在此后调用,请在添加库之后定位服务注册。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
8天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
21天前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
30天前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
39 2
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
90 9
|
2月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
2月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
93 3
|
1月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
2月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
124 6
|
2月前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。