asp.net core之Host
Host简介
在ASP.NET Core中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。
Host是通过使用IHostBuilder接口和Host.CreateDefaultBuilder方法来创建的。IHostBuilder接口允许我们配置和构建Host,而Host.CreateDefaultBuilder方法提供了一组默认的配置选项,使得创建Host变得更加简单。
Host的作用
- 生命周期管理:Host负责管理应用程序的生命周期。它在应用程序启动时执行一些初始化任务,例如读取配置文件、注册依赖项等。在应用程序关闭时,Host会执行一些清理任务,例如释放资源、保存状态等。通过Host,我们可以确保应用程序在启动和关闭时都能够执行必要的操作。
- 配置管理:Host提供了一种统一的方式来管理应用程序的配置。它可以从多个配置源(如命令行参数、环境变量、配置文件等)中读取配置信息,并将其应用于应用程序。这使得我们可以根据不同的环境(如开发、测试、生产)使用不同的配置,而无需修改应用程序的代码。
- 依赖项注入:Host还负责管理应用程序的依赖项。它可以配置和注册依赖项容器,使得应用程序的各个组件可以方便地获取它们所需的依赖项。通过依赖项注入,我们可以实现松耦合的组件设计,提高代码的可测试性和可维护性。
Host的用法
使用Host非常简单。下面是一个基本的示例:
using Microsoft.Extensions.Hosting;
using System;
class Program
{
static void Main(string[] args)
{
var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// 配置和注册依赖项
services.AddMyServices();
})
.Build();
// 执行应用程序
host.Run();
}
}
在上面的示例中,我们使用Host.CreateDefaultBuilder方法创建了一个Host,并通过ConfigureServices方法配置和注册了一些依赖项。最后,我们通过调用Build方法来构建Host,并通过调用Run方法来执行应用程序。
除了上面的基本用法之外,Host还提供了许多其他的配置选项和扩展点,以满足不同的需求。我们可以通过调用ConfigureHostConfiguration方法来配置Host的配置,通过调用ConfigureAppConfiguration方法来配置应用程序的配置,通过调用ConfigureServices方法来配置依赖项,以及通过调用ConfigureLogging方法来配置日志记录等。
Host的常见用例
- Web应用程序:在ASP.NET Core中,使用Host来托管Web应用程序是非常常见的用例。我们可以通过配置Host来启动Kestrel服务器,并将Web应用程序作为一个托管服务运行起来。Host还可以处理一些与Web应用程序相关的任务,例如HTTPS配置、请求管道配置等。
- 后台任务:Host也可以用于托管后台任务。我们可以通过Host来启动和管理后台任务的生命周期,并配置一些后台任务的特定选项,例如任务调度、并发限制等。Host还可以处理一些与后台任务相关的任务,例如日志记录、异常处理等。
- 控制台应用程序:使用Host来托管控制台应用程序是另一个常见的用例。Host可以帮助我们管理控制台应用程序的生命周期,并提供一些控制台应用程序特定的选项,例如命令行参数解析、控制台输出等。
Generic Host和Web Host
Web Host(Web 主机)
Web Host是ASP.NET Core 2.x版本及之前的主机模型。它主要用于托管Web应用程序,提供了一些特定于Web开发的功能。Web Host继承自Generic Host,并添加了一些与Web开发相关的默认配置和中间件。
Web Host提供以下功能:
- 配置HTTP请求处理管道:Web Host通过中间件来处理HTTP请求,并提供了一些默认的中间件,如路由、静态文件服务、MVC等。
- 集成IIS:Web Host可以与IIS(Internet Information Services)集成,以便通过IIS托管应用程序。
- 集成Kestrel:Web Host使用Kestrel作为默认的Web服务器,用于处理HTTP请求。
Generic Host(通用主机)
Generic Host是从ASP.NET Core 3.0版本引入的新主机模型。它是一个通用的、可扩展的主机,可以用于托管各种类型的应用程序,不仅限于Web应用程序。Generic Host提供了更多的灵活性和可扩展性,使开发者能够构建更加通用的应用程序。
Generic Host提供以下功能:
- 配置应用程序服务:Generic Host允许开发者配置应用程序所需的各种服务,如数据库连接、日志记录、身份验证等。
- 支持不同类型的应用程序:除了Web应用程序,Generic Host还可以用于托管后台服务、控制台应用程序等各种类型的应用程序。
- 集成ASP.NET Core应用程序:Generic Host可以用于托管ASP.NET Core应用程序,但不提供与Web开发相关的默认配置和中间件。
区别
Web Host是从Generic Host派生而来,专注于Web应用程序的托管,提供了与Web开发相关的默认配置和中间件。
Generic Host是一个通用的主机模型,适用于各种类型的应用程序,提供了更多的灵活性和可扩展性。
在ASP.NET Core 3.0及之后的版本中,建议使用Generic Host来构建新的应用程序,因为它提供了更多的功能和扩展性。
Web Host适用于传统的Web应用程序开发,提供了与Web开发相关的默认配置和中间件。Generic Host是一个通用的主机模型,适用于各种类型的应用程序,并提供了更多的灵活性和可扩展性。根据应用程序的需求,选择适合的主机模型来构建和托管应用程序。
WebApplication
从asp.net coe6开始,默认的asp.net core模板已经改成使用WebApplication来创建Web应用程序。WebApplication提供了一种简化的方式来配置和运行 Web 应用程序,而不需要 Startup 类。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();
在上面的示例中,我们使用WebApplication.CreateBuilder方法创建了一个WebApplication实例。
然后,通过builder.Services配置我们依赖注入。
最后,我们通过调用Build方法来构建WebApplication实例,并通过调用Run方法来运行应用程序。
WebApplication提供了许多其他的方法和扩展点,用于处理不同类型的请求、配置中间件、设置路由规则等。通过使用这些方法和扩展点,我们可以构建出复杂和强大的Web应用程序。
除了处理HTTP请求和生成HTTP响应之外,WebApplication还提供了一些其他的功能,例如依赖项注入、配置管理、日志记录等。我们可以通过调用Services属性来访问依赖项注入容器,通过调用Configuration属性来访问配置信息,通过调用Logging属性来访问日志记录功能。
通过使用WebApplication,我们可以构建出强大和灵活的Web应用程序。
总结
ASP.NET Core中的Host是一个重要的概念,它提供了一种可靠和灵活的方式来启动、配置和管理应用程序。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。通过Host,我们可以实现各种不同类型的应用程序,例如Web应用程序、后台任务和控制台应用程序。希望本文对你理解和使用ASP.NET Core中的Host有所帮助。
欢迎进群催更。

asp.net core之Host的更多相关文章
- 理解ASP.NET Core - [04] Host
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 本文会涉及部分 Host 相关的源码,并会附上 github 源码地址,不过为了降低篇幅,我会 ...
- 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践
写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 可能很多新手都会遇到同样的问题:我要我的Asp.net ...
- [转]ASP.NET Core 1 Deploy to IIS
本文转自: http://webmodelling.com/webbits/aspnet/aspnet-deploy-iis.aspx 15 Sep 2016. This tutorial will ...
- ASP.NET Core 1.0: Deploy to IIS
尽管ASP.NET最新的官方文档记录了如何Deploy to IIS,但是实际操作起来依旧磕磕绊绊.官方文档地址:https://docs.asp.net/en/latest/publishing/i ...
- 《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项
1.配置文件的相关闲话 Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级 命令行>环境变量 ...
- ASP.NET CORE 基础知识(一):概述【下】
此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译.其中或许会添加本人对 ASP.NET Core 的浅显理解 配置 ASP.NET Core提供了一个配置框架,其能够从 ...
- Asp.net Core 2.1新功能Generic Host(通用主机),了解一下
什么是Generic Host ? 这是在Asp.Net Core 2.1加入了一种新的Host,现在2.1版本的Asp.Net Core中,有了两种可用的Host. Web Host –适用于托管W ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 02. Web Host 的默认配置
视频地址: https://www.bilibili.com/video/av38392956/?p=2 语雀 https://www.yuque.com/yuejiangliu/dotnet/ixt ...
- 探索ASP.NET Core 3.0系列一:新的项目文件、Program.cs和generic host
前言:在这篇文章中我们来看看ASP.Net Core 3.0应用程序中一些基本的部分—— .csproj项目文件和Program.cs文件.我将会介绍它们从 ASP.NET Core 2.x 中的默认 ...
- 探索 ASP.Net Core 3.0系列五:引入IHostLifetime并弄清Generic Host启动交互
前言:在本文中,我将介绍如何在通用主机之上重新构建ASP.NET Core 3.0,以及由此带来的一些好处. 同时也展示了3.0中引入新的抽象类IHostLifetime,并描述了它在管理应用程序(尤 ...
随机推荐
- 安装MongoDB、及基本使用
1.MongoDB简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的数据库.是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似json ...
- ElementPlus 组件全局配置
友链:语雀,在线文档协同平台 官方提供的全局配置:Config Provider 本文只做简单的模板参考,具体的配置请根据自己的业务灵活设置,如果你使用的是其它的ui框架,原理应该都差不多 入口文件的 ...
- 小米商城主页展示HTML+CSS
大佬们呀,花了好几天的时间总算是看着页面展示可以了,求赐教! 小米商城主页,对大佬来说肯定简单爆了,我抄写了好久呀,总是有一点点的小问题,还搞不明白 主要是一个静态的小米商城页面,HTML前端代码不复 ...
- 联想win8改win7
知识点分析:目前联想出厂预装Windows 8的台式和一体机使用都是UEFI+GPT硬盘的组合,并且开启了安全启动,但是目前除Window 8以外的其他Windows系统均不支持这种模式,因此如果需要 ...
- 2022-09-04:以下go语言代码输出什么?A:不能编译;B:45;C:45.2;D:45.0。 package main import ( “fmt“ ) func main() {
2022-09-04:以下go语言代码输出什么?A:不能编译:B:45:C:45.2:D:45.0. package main import ( "fmt" ) func main ...
- 2021-08-19:超级洗衣机。假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,
2021-08-19:超级洗衣机.假设有 n 台超级洗衣机放在同一排上.开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的.在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机, ...
- 2021-09-02:IP 到 CIDR。给定起始IP和整数n,返回长度最小的CIDR块。力扣751。比如:ip=255.0.0.7,n=10,输出:[“255.0.0.7/32“,“255.0.0.
2021-09-02:IP 到 CIDR.给定起始IP和整数n,返回长度最小的CIDR块.力扣751.比如:ip=255.0.0.7,n=10,输出:["255.0.0.7/32" ...
- requests标头在json序列化时报错TypeError: Object of type CaseInsensitiveDict is not JSON serializable
requests的作者似乎为了解决header里大小写兼容的问题,而创建了大小写不敏感的数据结构CaseInsensitiveDict,requests返回的响应标头即是一个CaseInsensiti ...
- phpstudy-sqlilabs-less-11
题目:POST - Error Based - Single quotes- String 基于错误的单引号post型字符变形的注入 看到有个账密输入口第一反应尝试post注入 打开post data ...
- 通过nc获取靶机的反弹Shell [靶机实战]
1.环境 Kali:172.30.1.3/24 靶机(Funbox9):172.30.1.129/24 2.信息收集 通过nmap扫描此主机,我们需要获取到开放的端口以及服务的Banner 1 nma ...