ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析

ASP.NET Core 是一种开源的、跨平台的、高性能的 Web 应用程序框架。其中 Host.CreateDefaultBuilder 是一个 ASP.NET Core 5.0 的新特性,它提供了一个有用的方法来快速地搭建一个 Web 应用程序的主机。本攻略将详细讲解 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 执行过程,并提供两个实例说明。

Host.CreateDefaultBuilder 执行过程

Host.CreateDefaultBuilder 是通过启动类(Program.cs)的默认构造器 Startup 的方法之前来执行的,并将其返回值传递给 Startup。其执行过程包括以下三个步骤:

1. 设置主机配置

第一步是设置主机配置。这一步使用了一个工厂方法 CreateDefaultBuilder,它返回了一个 IHostBuilder 接口的实例,它包含了启动一个应用程序所需要的所有配置信息。代码示范如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

在这里我们使用了 ConfigureWebHostDefaults 方法,用于配置主机都需要的一系列操作。

2. 加载配置文件

第二步是加载配置文件。如果当你运行 ASP.NET Core 应用程序时没有传入命令参数,那么应用程序将会默认加载 appsettings.json 文件,这个文件必须放置在项目的根目录下,否则你需要指定其它路径的配置文件。下面是加载配置文件的代码示例:

.ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.SetBasePath(Directory.GetCurrentDirectory());
                    config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                    config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
                    config.AddEnvironmentVariables();
                    if (args != null)
                    {
                        config.AddCommandLine(args);
                    }
                });

上面代码使用了方法ConfigureAppConfiguration,它可以加载不同环境下的配置文件,还可以通过命令行参数来配置(例如:dotnet run --port 5000),以此来满足不同环境下的需求。

3. 配置日志消息

第三步是配置日志消息。ASP.NET Core 在启动时默认加载了一个日志消息模块,用于输出日志消息。在这个步骤中,我们可以自定义日志消息格式、日志存储位置等参数。代码示例如下:

.ConfigureLogging((hostingContext, logging) =>
                {
                   // 配置日志消息记录位置的路径
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                   // 配置日志消息格式, 以Console输出日志消息  
                    logging.AddConsole();
                   // 配置日志消息格式, 以Debug输出日志消息
                    logging.AddDebug();
                });

示例说明

我们提供以下两个 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 的示例。

示例1: 使用Host.CreateDefaultBuilder托管Console输出

在这个示例中,我们来介绍如何使用Host.CreateDefaultBuilder托管控制台输出。首先,你需要使用 .NET CLI 创建一个新的控制台项目:

dotnet new console --name ConsoleApp

然后,你需要添加以下代码到 Program.cs 文件中,来配置控制台输出:

using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var host = Host.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                })
                .ConfigureServices(services =>
                {
                    services.AddTransient<MyService>();
                })
                .Build();

            var myService = ActivatorUtilities.CreateInstance<MyService>(host.Services);
            myService.Run();

            host.Run();
        }
    }

    class MyService
    {
        private readonly ILogger<MyService> _logger;

        public MyService(ILogger<MyService> logger)
        {
            _logger = logger;
        }

        public void Run()
        {
            _logger.LogInformation("Hello, world from MyService!");
        }
    }
}

在上述例子中,我们通过调用静态的方法 Host.CreateDefaultBuilder 来创建了一个默认的主机,并且使用了 ConfigureLogging 方法来配置日志记录位置为控制台输出。在 ConfigureServices 方法中添加了 MyService 类型,并在此类型中通过调用 _logger.LogInformation 方法输出了一条信息。最后,在调用 host.Run() 方法时,我们成功启动并且运行了我们的应用程序。

示例2: 使用Host.CreateDefaultBuilder托管Web应用

在这个示例中,我们来介绍如何使用Host.CreateDefaultBuilder托管 Web 应用。首先,你需要使用 .NET CLI 创建一个新的 Web 项目,我们以 Razor Pages 为例:

dotnet new webapp --name WebApp

然后你需要添加以下配置代码到 Program.cs 文件中,来创建一个默认的主机:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace WebApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

在这个示例中,我们使用了 ConfigureWebHostDefaults 方法来配置 Web 主机,同时使用了 UseStartup 方法来配置自己的 StartUp 类。

最后,我们需要编写自己的 Startup 类来处理 HTTP 请求和响应。 在 Startup 类中,我们需要添加以下中间件来处理 HTTP 请求和响应:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace WebApp
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });

                endpoints.MapRazorPages();
            });
        }
    }
}

在上述代码中,我们使用了 AddRazorPages 方法将 Razor Pages 中间件添加到服务容器中,并在方法 Configure 中调用了 UseRoutingUseEndpoints 方法来处理 HTTP 请求并返回响应。

结论

本攻略介绍了 ASP.NET Core 5.0 中的 Host.CreateDefaultBuilder 执行过程,并提供了两个示例来说明如何为控制台应用程序和 Web 应用程序创建默认主机。对于了解和学习 ASP.NET Core 5.0 的程序员来说,Host.CreateDefaultBuilder 是一个非常重要且有用的方法,特别是在应用程序的启动阶段。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • C#中的DateTime是值类型还是引用类型

    C#中的DateTime是值类型还是引用类型是一个常见的问题,它的答案是:DateTime是值类型。以下是详细的解释: 在C#中,类型可以被分为值类型和引用类型两种。值类型在栈上分配内存并且存储它们的实例,它们之间没有共享数据的方式。引用类型在堆上分配内存并且存储一个指向它们的实例的引用。值类型的示例包括:int、double、bool、struct、enu…

    C# 2023年6月1日
    00
  • 使用C#获取远程图片 Form用户名与密码Authorization认证的实现

    下面是详细讲解 “使用C#获取远程图片Form用户名与密码Authorization认证的实现” 的攻略。 什么是远程图片Form用户名与密码Authorization认证? 在HTTP传输中,我们经常需要进行身份认证,以确保请求者有权限访问资源。其中一种传输方式是要求客户端发送用户名和密码,以验证是否有权访问远程服务器上的资源。这种身份验证方式被称为Aut…

    C# 2023年5月15日
    00
  • Asp.net Core项目配置HTTPS支持

    以下是“Asp.netCore项目配置HTTPS支持”的完整攻略: 什么是HTTPS HTTPS是一种安全的HTTP协议,它使用SSL或TLS协议对数据进行加密和解密,以保护数据在传输过程中的安全性。 Asp.netCore项目配置HTTPS支持 以下是Asp.netCore项目配置HTTPS支持的步骤: 生成证书文件 配置应用程序以使用证书文件 启用HTT…

    C# 2023年5月12日
    00
  • C#Process的OutputDataReceived事件不触发问题及解决

    首先需要说明的是,C#中的Process类可以用于启动和管理外部进程,包括可以获取该进程的标准输出流等信息。然而,有时候我们会遇到Process类中OutputDataReceived事件不触发的问题,也就是说并不能获取到进程的标准输出流信息。 出现这个问题的原因有多种,比如: 进程的输出缓冲区被填满; 进程输出数据流的标准输出缓冲区不存在; 异步读取操作运…

    C# 2023年6月6日
    00
  • jquery对象访问是什么及使用方法介绍

    jQuery对象是指通过jQuery选择器选择到的DOM元素,它是一个包含了一系列jQuery方法的对象。本文将详细介绍jQuery对象的访问和使用方法,包括获取和操作jQuery对象等。 获取jQuery对象 获取jQuery对象的方法有多种,以下是常用的几种方法: 通过选择器获取 我们可以使用jQuery选择器来获取jQuery对象,例如: var $d…

    C# 2023年5月15日
    00
  • C# 实现Trim方法去除字符串前后的所有空格

    下面是我对“C# 实现Trim方法去除字符串前后的所有空格”的完整攻略: 1.概述 在C#中,字符串是一种非常常见的数据类型。在进行字符串操作时,常常涉及到去除字符串前后的所有空格。这个操作可以用C#自带的Trim()方法来实现。同时,在某些场合下,我们需要自己编写代码实现Trim()方法。 2.使用C#自带的Trim()方法去除字符串前后的所有空格 C#自…

    C# 2023年6月7日
    00
  • C#如何用ThoughtWorks生成二维码

    生成二维码可以使用ThoughtWorks开源的ZXing库。以下是使用C#利用ThoughtWorks生成二维码的完整攻略: 步骤一:引入依赖 使用ZXing生成二维码需要引入ThoughtWorks.QRCode的Nuget包。在Visual Studio中,可以通过在“解决方案资源管理器”中右键点击项目,选择“管理NuGet程序包”来搜索并安装Thou…

    C# 2023年6月6日
    00
  • C#连接ORACLE出现乱码问题的解决方法

    下面我将详细讲解“C#连接ORACLE出现乱码问题的解决方法”的完整攻略。 问题描述 在使用C#连接ORACLE时,有时会出现乱码问题。这个问题比较常见,主要原因是因为C#和ORACLE默认的字符集不一致,导致乱码出现。 解决方法 解决乱码问题,可以从以下几个方面入手。 1.确认C#和ORACLE的字符集 首先,需要确认C#和ORACLE所使用的字符集。C#…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部