首页 > 编程语言 >asp.net core之Host

asp.net core之Host

时间:2023-07-27 11:24:21浏览次数:44  
标签:core asp Web Generic 配置 应用程序 Host net WebApplication

Host简介

在ASP.NET Core中,Host是一个托管应用程序的宿主环境。它提供了一种统一的方式来启动和运行应用程序,无论是在开发环境中还是在生产环境中。Host负责处理应用程序的生命周期、配置和依赖项管理等任务,使开发人员能够专注于应用程序的业务逻辑。

Host是通过使用IHostBuilder接口和Host.CreateDefaultBuilder方法来创建的。IHostBuilder接口允许我们配置和构建Host,而Host.CreateDefaultBuilder方法提供了一组默认的配置选项,使得创建Host变得更加简单。

Host的作用

  1. 生命周期管理:Host负责管理应用程序的生命周期。它在应用程序启动时执行一些初始化任务,例如读取配置文件、注册依赖项等。在应用程序关闭时,Host会执行一些清理任务,例如释放资源、保存状态等。通过Host,我们可以确保应用程序在启动和关闭时都能够执行必要的操作。
  2. 配置管理:Host提供了一种统一的方式来管理应用程序的配置。它可以从多个配置源(如命令行参数、环境变量、配置文件等)中读取配置信息,并将其应用于应用程序。这使得我们可以根据不同的环境(如开发、测试、生产)使用不同的配置,而无需修改应用程序的代码。
  3. 依赖项注入: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的常见用例

  1. Web应用程序:在ASP.NET Core中,使用Host来托管Web应用程序是非常常见的用例。我们可以通过配置Host来启动Kestrel服务器,并将Web应用程序作为一个托管服务运行起来。Host还可以处理一些与Web应用程序相关的任务,例如HTTPS配置、请求管道配置等。
  2. 后台任务:Host也可以用于托管后台任务。我们可以通过Host来启动和管理后台任务的生命周期,并配置一些后台任务的特定选项,例如任务调度、并发限制等。Host还可以处理一些与后台任务相关的任务,例如日志记录、异常处理等。
  3. 控制台应用程序:使用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有所帮助。

欢迎进群催更。

标签:core,asp,Web,Generic,配置,应用程序,Host,net,WebApplication
From: https://www.cnblogs.com/fanshaoO/p/17584439.html

相关文章

  • DeepObfusCode:Source Code Obfuscation Through Sequence-to-Sequence Networks
    一、Introduction代码混淆技术旨在解决代码逆向对抗问题。本质上,代码混淆技术的目标是:在保持一个程序逻辑结构不变以及完整保存的前提下,同时让攻击者不易识别,以此保护软件的完整性和知识产权。传统的防护策略包括:插入空白/冗余的逻辑运算增加不必要的条件运算等传统的混淆......
  • 绕过杀软NetUser的小tips
    在拿了shell上线了的情况下,通过netuseradd新建用户经常会被杀软拦截拒绝访问,以比较常用的火绒和360为例,简单说一下绕过的小tips某绒可以看到通过netuser命令新建用户,火绒拦了,检测的是cmd.exe去执行C:\Windows\System32\net.exe把C:\Windows\System32\net.exe复制出来放到别......
  • EtherNet/IP转 Modbus网关实现AB PLC控制变频器案例
    捷米特JM-EIP-RTU网关Modbus转ETHERNET/IP用于将多个变频器连接到Ethernet/Ip主网,以便森兰变频器可以由ABPLC控制。 配备专用于JM-EIP-RTU网关的EDS文件,ABPLC主站可以控制森兰逆变器从站。使用 AB 系统的配置方法1,运行 RSLogix5000 程序加载捷米特JM-EIP-RTU的EDS ......
  • MODBUS RTU转 EtherNet/IP 网关连接森兰变频器与欧姆龙系统通讯配置案例
    捷米特JM-EIP-RTU(Modbus转Ethernet/Ip)网关,用于将多个 MODBUS 从站设备接入 ETHERNET/IP 主站网络,实现 MODBUS 转 ETHERNET/IP 功能。配上 捷米特JM-EIP-RTU网关专用的 EDS 文件,实现 ETHERNET/IP 主 站对 MODBUS 从站设备的控制。 使用欧姆龙系统的配置方法1......
  • c#与.net新接触
    做了好多年C#与.net,然后一直没有新建过项目,最近接了个新项目,然后用模板建了个项目之后,差点有些不适应,感觉需要再深入学习一下.说实话学什么语言也得不段学习新东西,要么你总是会落后,落后之后就不好追赶了,哪怕别人把源码给你,你都看着费劲最近想着提高自己又不知道该怎么学,太容易......
  • linux netfilter 引发网络不稳定
     记录前因:K8S部署的集群,最近遇到域名解析失败情况,查看coredns日志,没有明显问题。解析报错:connectiontimedout;noserverscouldbereached 重启集群服务,解析没有问题,基本确认跟某个业务服务有关联解决过程: 查看跟踪连接数:sysctlnet.netfilter.nf_conntrack_coun......
  • GET chrome-extension://invalid/ net::ERR_FAILED是什么错误
    GETchrome-extension://invalid/net::ERR_FAILED是什么错误错误信息"GETchrome-extension://invalid/net::ERR_FAILED"通常表示在Chrome浏览器中发生了一个资源加载失败的问题。该错误信息表明浏览器尝试获取一个Chrome扩展(chrome-extension)中的资源,但该资源的URL地址是无效......
  • VS报错error NETSDK1045: 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.
    从微软官网下载.NET6.0:https://dotnet.microsoft.com/zh-cn/download/visual-studio-sdks?cid=getdotnetsdk重启后打开VS2019仍然出现这个报错回到官网仔细查看,发现原来.NET6.0版本以上必须使用VS2022版本编译了使用VS2022打开编译,报错消失题外话:当电脑已经安装了刚好版本......
  • Spire.XLS of.net 怎么设置字体样式(普通单元格和带公式的单元格)
    普通的设置就直接套用官方文档即可//创建字体ExcelFontfont1=workbook.CreateFont();//设置字体,字形,大小,颜色font1.FontName="宋体";font1.IsBold=true;font1.Size=10;font1.KnownColor=ExcelColors.Blue;//为A1单元格......
  • .NET 7 使用gRpc
    Server端 添加proto文件,编辑项目文件添加proto文件,编译项目 添加Service服务 启动Server Client端安装package Copy proto文件到项目里   ......