ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Ultimate ASP.NET CORE 6.0 Web API --- 读书笔记(1)

2022-06-16 19:36:51  阅读:177  来源: 互联网

标签:CORE ASP 读书笔记 builder 配置 中间件 IApplicationBuilder 方法 app


Project Configuration

本文内容来自书籍: Marinko Spasojevic - Ultimate ASP.NET Core Web API - From Zero To Six-Figure Backend Developer (2nd edition)

1.2 launchSettings.json File Configuration

  • launchBrowser:在项目启动时,是否自动打开浏览器
  • launchUrl:项目启动时,自动打开浏览器后的指向url,也就是applicationUrl/launchUrl
  • applicationUrl:项目启动的绑定地址,创建时有加密和不加密两个地址

1.3 Program.cs Class Explanations

与.NET 5相比较,这个文件的变化在

  • 顶级语句,配置语句只需要直接编写,其他的命名空间、类、入口方法由编译器生成
  • 隐式使用指令,编译器根据项目类型自动添加一组global using指令,如果不需要隐式指令,可以在.csproj文件中配置关闭
    <ImplicitUsings>disable</ImplicitUsings>
  • 不需要Startup文件的ConfigureServicesConfigure配置,已经在全部合并在Program.cs
var builder = WebApplication.CreateBuilder(args);

这个builder的类型是WebApplicationBuilder,然后这个类主要负责

  • 使用builder.Configuration添加项目配置
  • 使用builder.Services注册服务
  • 使用builder.Logging配置日志系统
  • 还有一些IHostBuilderIWebHostBuilder的配置
var builder = WebApplication.CreateBuilder(args);

// 注册服务

var app = builder.Build();

// 注册中间件

1.4 扩展方法和CORS配置

在注册服务的时候,往往会有很多配置,那么为了让Program.cs这个文件看起来比较整洁,我们可以给WebApplicationBuilder编写扩展方法,来替代直接写在Program.cs的配置

然后是写一个跨域配置为例子(一般我会用Nginx来解决跨域)

  1. 首先是创建一个静态类用以编写扩展方法
    Extensions/ServiceExtensions.cs

  2. 然后在里面注册服务

// Extensions/ServiceExtensions.cs

public static class ServiceExtensions
{
    public static void ConfigureCors(this IServiceCollection service) =>
        service.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy", builder =>
                builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader());
        });
}
  1. 现在,服务器允许所有的主机访问,当然也可以用WithOrigins()方法来指定主机地址,使用WithMethods()指定HTTP方法,`WithHeaders()指定请求头

1.6 Additional Code in the Program Class

  • AddControllers(),它只会将Controller注册到IServiceCollection中,而没有Views或者Pages,因为在WebAPI中不需要

  • var app = builder.Build();在这个方法之后,我们得到了WebApplication,这个类非常重要,因为它实现很多接口:

    • IHost,开启,关闭主机
    • IApplicationBuilder,用来构建中间件管道
    • IEndpointRouteBuilder,用来添加端点到我们的app中
  • UseHttpRedirection()方法,添加一个中间件用来将HTTP转发到HTTPS中

  • UseAuthorization()方法,添加一个中间件用来授权

  • MapControllers()方法,添加来自controller actions的endpoints到IEndpointRouteBuilder

  • Run()方法,启动应用并阻塞直到Host关闭

微软官网提示,添加中间件的顺序很重要

1.7 Environment-Based Settings

需要区分developmentproduction环境变量,因为在不同环境,它们的地址、端口、密码、数据库等都不一样

所以我们需要将它们分割开,所以就有了项目创建时的两个配置文件

  • appsettings.json
  • appsetings.Development.json(这里的配置会覆盖上面那个文件的配置)

appsettings.{EnvironmentSuffix}.json文件会把appsettings.json的配置覆盖

通过ASPNETCORE_ENVIRONMENT这个环境变量来设置使用哪一个配置文件

1.8 ASP.NET Core Middleware

其实中间件可以认为是一个代码区域环绕在requestsresponses外围

然后按照注册的顺序,不断调用next方法向下传递,直到一个中间件不再调用即终点

添加自定义的中间件,有两种:

  • Run:没有next方法,它总是终点,这个方法接受一个RequestDelegate类型的委托,这个委托的入参是HttpContext,它里面包含着requestsresponses,然后可以通过修改它们来达到我们的目的
  • Use:链接多个中间件,它接受Func委托,两个入参,一个出参,第二个Func是到达下个中间件的方法
public static IApplicationBuilder Use(this IApplicationBuilder app,Func<HttpContext, Func<Task>, Task> middleware);

不能在Use中,写入了responses然后继续调用next,这样会报错

  • Map:作为管道的分支,请求经过这里的时候,会匹配路径,如果正确,会走向这个分支的中间件管道
public static IApplicationBuilder Map(this IApplicationBuilder app,PathString pathMatch, Action<IApplicationBuilder> configuration)
  • MapWhen:也是管道分支,不过不是使用路径匹配,而是一个predicate判断是否进入
public static IApplicationBuilder MapWhen(this IApplicationBuilder app, Func<HttpContext, bool> predicate, Action<IApplicationBuilder> configuration)

标签:CORE,ASP,读书笔记,builder,配置,中间件,IApplicationBuilder,方法,app
来源: https://www.cnblogs.com/huangwenhao1024/p/16383157.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有