Net Core教程

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

本文主要是介绍Ultimate ASP.NET CORE 6.0 Web API --- 读书笔记(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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)
这篇关于Ultimate ASP.NET CORE 6.0 Web API --- 读书笔记(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!