当前位置: 首页 > 科技观察

DotNET7:最少的API使用,你知道吗?

时间:2023-03-18 14:09:12 科技观察

最低限度的API在.NET7中没有加入,我记得应该是在.NET6中提供的,但对我来说,是现在才开始用的。创建一个最小的API。在VS2022中创建一个WebAPI项目。如果不勾选usecontroller,你将创建一个最小的API:如果你不勾选usecontroller,你将创建一个最小的API模板。默认情况下将添加启用OpenAPI和Swagger。顶层语句:顶层语句是C#9.0新增的特性。如果不使用,main函数也会出现在Program类中。创建的项目只有两个文件。主要的变化是没有了之前的Startup类,只有一个Program和一个配置文件appsetting.json:Program类的全部代码如下:varbuilder=WebApplication.CreateBuilder(args);//将服务器添加到下面的容器,相当于前面Startup类中的ConfigureServices方法varapp=builder.Build();//下面写pipeline相关的代码,相当于前面Startup类中的Configure方法//写下面的接口,相当于前面Controller中的方法varsummaries=new[]{"Freezing","Bracing","Chilly","Cool","Mild","Warm","Balmy","炎热","闷热","灼热"};app.MapGet("/weatherforecast",()=>{varforecast=Enumerable.Range(1,5).Select(index=>newWeatherForecast(DateOnly.FromDateTime(DateTime.Now.AddDays(index)),Random.Shared.Next(-20,55),summaries[Random.Shared.Next(summaries.Length)])).ToArray();返回预测;});//运行APIapp.Run();inte记录天气预报(DateOnlyDate,intTemperatureC,string?Summary){publicintTemperatureF=>32+(int)(TemperatureC/0.5556);}app.MapGet方法接受两个参数,第一个参数是一个字符串,是接口的访问路径,第二个参数是一个delegate,用来编写接口的业务逻辑。从MapGet的方法名可以看出这是一个Get请求的接口方法。如果你想要WithPost,你可以使用MapPost。添加接口方法很简单,如下图所示:使用Serilog日志框架1.安装NuGet包:Serilog.AspNetCore。安装这个会包含Serilog、Serilog.Sink.File等。2.Program类的builder创建后,添加Serilog的使用:usingSerilog;varbuilder=WebApplication.CreateBuilder(args);//添加server到下面的容器中,相当于前面Startup类中的ConfigureServices方法//添加serilogbuilder.Host.UseSerilog((hostContext,services,configuration)=>{configuration.WriteTo.File("serilog-file.txt").WriteTo.Console();});varapp=builder.Build();//下面代码省略3.运行程序,你会看到在工程目录下会生成一个serilog-file.txt文本文件,里面记录了所有的日志。4、在上面添加的helloworld方法中使用log:app.MapGet("/helloworld",()=>{Log.Information("helloworld.start");return"hello,oec2003";});Information就是logLevel,有Error、Warning、Fatal、Debug。调用接口方法后,日志将写入文本文件。依赖注入依赖注入的一个常见做法是使用构造函数进行注入。在传统的WebAPI中,可以在Controller的构造函数中完成,但极简API是没有Controller的。让我们看看如何注入最小的API。1.在Program类最底层添加IUser接口和User类:internalinterfaceIUser{stringGetName();}internalclassUser:IUser{publicstringGetName(){return"oec2003";}}2.在Program类中创建builder后,添加依赖注入的配置:builder.Services.AddTransient();3、注入的地方由原来的构造函数改为方法参数:app.MapGet("/helloworld",(IUseruser)=>{return$"hello,{user.GetName()}";});用最小的API配置项目中的两个文件,其中一个是appsetting.json配置文件,Serilog日志框架的配置如下例,演示如何读取配置文件。1.在上面的Serilog例子中,配置是硬编码的,现在将配置移动到appsetting.json配置文件中。“Serilog”:{“MinimumLevel”:“信息”,“覆盖”:{“Microsoft.AspNetCore”:“警告”},“WriteTo”:[{“名称”:“控制台”},{“名称”:“File","Args":{"path":"Serilogs\\serilog.log"}}]}2.修改builder部分的代码:builder.Host.UseSerilog((hostingContext,loggerConfiguration)=>loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration));3、运行程序后,会在程序的根目录下创建一个Serilogs目录,并在该目录下创建一个serilog.log文件。总结1、对于一些简单的接口场景,使用最小的API会更方便,全部处理在一个文件中。2.除了通过依赖注入传递的方法参数外,其他很多地方和前面的用法类似,就是将Startup中的ConfigureServices方法和Configure方法移到Program类的固定位置。