Web API学习笔记(二)—— 基本WebApi架构配置详解

一、默认HostBuilder

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MyWebApi
{
    
    
    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>();
                });
    }
}

什么是Host?
Host 提供了使用预先配置的默认值创建 IHostBuilder 实例的方便方法

什么是主机生成器(HostBuilder )?
HostBuilder 是一个用于在应用程序中添加一些功能的对象。

什么是CreateDefaultBuilder()方法?作用?返回值?
CreateDefaultBuilder()方法 会应用清单的默认值于返回 HostBuilder
args清单如下:
1.设置内容根路径(ContentRootPath)到当前目录(GetCurrentDirectory);
2.从 “DOTNET_” 带前缀到环境变量(prefixed environment variables)加载到主机(host);
3.从提供的命令行参数( command line args)加载到主机(host);
4.从appsettings.jsonappsettings[Microsoft.Extensions.Hosting.IHostEnvironment.EnvironmentName].json加载到应用(app);
5.从User Secrets加载到应用(app);
6.从环境变量(environment variables)加载到应用(app);
7.从从提供的命令行参数( command line args)加载到应用(app);
8.配置控制台打印和事件资源的输出;
9.当[Microsoft.Extensions.Hosting.IHostEnvironment.EnvironmentName] Development时,启用依赖项注入(dependency injection)容器上的范围验证。
返回(return)使用预先配置的默认值初始化类的新实例。

作用:
用预先配置的默认值初始化一个新的实例HostBuilder类
返回值:
已经初始化的 IHostBuilder

什么是ConfigureWebHostDefaults()方法?
ConfigureWebHostDefaults()是IHostBuilder的一个扩展方法,配置web主机的默认设置
作用:
用预先配置的默认值初始化类的新实例IWebHostBuilder
返回值:
链接主机生成器的接口(IHostBuilder)

在Program.cs脚本中主要干了两件事:
1.添加Web 主机生成器(CreateHostBuilder)
2.配置启动类(Startup.class)

---->然后返回Main方法中看
CreateHostBuilder(args).Build()?
作用:
用之前给定的事件也就是ConfigureWebHostDefaults()方法中的干的事情:

ConfigureWebHostDefaults(webBuilder =>
{
    
    
    webBuilder.UseStartup<Startup>();
});

通过web生成器(webBuilder)利用Startup类里的配置建立 WebHost as(作为) IHost
这个Build()方法只会被调用一次

返回值:
已经初始化好的的 IHost

CreateHostBuilder(args).Build().Run()?
作用:
运行应用并且阻塞回调线程直到主机关闭

二、启动类(Startup.Class)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace MyWebApi
{
    
    
    public class Startup
    {
    
    
        public Startup(IConfiguration configuration)
        {
    
    
            Configuration = configuration;
        }

        public IConfiguration Configuration {
    
     get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
    
    
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
    
    
            if (env.IsDevelopment())
            {
    
    
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
    
    
                endpoints.MapControllers();
            });
        }
    }
}

看这个类,先明白以下几个接口的作用:
IConfiguration
该接口表示一组键/值应用程序配置属性。
IServiceCollection
指定服务描述符集合的协定。
IApplicationBuilder
该接口提供配置应用程序请求管道的机制
IWebHostEnvironment
该接口提供有关正在运行应用程序的web托管环境的信息。

其中ConfigureServices和Configure方法都会在运行时调用。
ConfigureServices()?
通过之前的配置信息添加一个控制器可参考launchSettings.json配置控制器
Configure()?
env.IsDevelopment()
这个也是从配置信息中拿到,如果是development就使用开发者异常页面在Html中显示响应错误。配置地方在launchSettings.json中如下所示:
在这里插入图片描述
app.UseRouting()
添加一个端点路由中介软件(EndpointRouting—>允许不同程序协同工作)来指定IApplicationBuilder
app.UseAuthorization()
添加一个授权(Authorization)中介软件(允许不同程序协同工作)来指定IApplicationBuilder,
app.UseEndpoints()
添加一个路由(Endpoint)中介软件(允许不同程序协同工作)来指定EndpointDataSource实例从 EndpointRouteBuilder 配置,生成 EndpointMiddler,这个EndpointMiddler将会执行与当前请求相关的Endpoint。
endpoints.MapControllers()
通过endpoints映射相应的控制器,并不指定任意的控制器。

下一节: Web API学习笔记(三)—— 设置资源访问的默认路由

猜你喜欢

转载自blog.csdn.net/weixin_45724919/article/details/126647050