单页网站建站,谷歌浏览器下载安装,英文网站建设szjijie,建设网站的需求分析Minimal APIs 是.Net 6 中新增的模板#xff0c;借助 C# 10 的一些特性以最少的代码运行一个 Web 服务。本文脱离 VS 通过 VS Code#xff0c;完成一个简单的 Minimal Api 项目的开发。创建项目新建一个文件夹#xff0c;用来管理我们的项目文件#xff0c;文件夹内启动命令… Minimal APIs 是.Net 6 中新增的模板借助 C# 10 的一些特性以最少的代码运行一个 Web 服务。本文脱离 VS 通过 VS Code完成一个简单的 Minimal Api 项目的开发。创建项目新建一个文件夹用来管理我们的项目文件文件夹内启动命令行通过dotnet new web创建项目。Minimal
├── obj
├── Properties
├── appsettings.Development.json
├── appsettings.json
├── Minimal.csproj
└── Program.cs运行项目项目目录下执行dotnet run运行项目。PS C:\Users\User01\Desktop\Minimal dotnet run
正在生成...
info: Microsoft.Hosting.Lifetime[14]Now listening on: https://localhost:7221
info: Microsoft.Hosting.Lifetime[14]Now listening on: http://localhost:5252
info: Microsoft.Hosting.Lifetime[0]Application started. Press CtrlC to shut down.
info: Microsoft.Hosting.Lifetime[0]Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]Content root path: C:\Users\User01\Desktop\Minimal\运行效果如下:Codingbuilder 实例提供了 Services 属性可以完成原本 Startup 类 ConfigureServices 方法中注册服务的工作,Configure 方法的一些 Use 操作则通过 app 来完成。builder.Services.AddMemoryCache();app.UseStaticFiles();
if (app.Environment.IsDevelopment())
{app.UseSwagger();app.UseSwaggerUI(c c.SwaggerEndpoint(/swagger/v1/swagger.json, ${builder.Environment.ApplicationName} v1));
}Mapbuilder.Build()返回的 app 实例提供了 Map、Methods、MapXXX 方法实现 HttpMethod 路由的映射。这里只以 Get 请求为例。Map 和 MapMethods 方法提供不同的特性和参数可以代替 MapGet 方法。app.MapGet(/, () Hello World!);app.Map(/, [HttpGet] () Hello World!);HttpGet 特性限定请求为 Get 请求如果不指定则不限制请求方法Get、Post 等方式可以请求改路由地址app.MapMethods(/, new Liststring() { HttpMethod.Get.ToString() }, () Hello World!);Application代码内直接修改应用程序配置如修改监听端口app.Urls.Add(http://localhost:3000);
//app.Run();
app.Run(http://localhost:4000);优先级 app.Run app.Urls.Add launchSettingsDependency InjectionMinimal APIs 中无法使用构造函数注入但可以通过参数方式注入并忽略 FromServices 特性。app.MapGet(/info, (IWebHostEnvironment env) new {Time DateTimeOffset.UtcNow,env.EnvironmentName
});Context一些 Http 请求的上下文信息也可以通过参数直接指定方法体内直接使用代替 MVC 中的 Request 等。如HttpContextHttpRequestHttpResponseClaimsPrincipalCancellationTokenapp.MapGet(/context, (HttpContext httpContext) new
{Data httpContext.Connection.Id
});更多类型参考githubResponses通过静态类 Results 返回标准的相应类型实现和 ControllerBase 提供对应方法相同的效果。app.MapGet(/ok/{id}, (int id)
{return Results.Ok($ok:{id});
});Link Generation通过扩展方法 WithXXX 等可以对路由进行一些配置如通过 WithName 指定名称再通过 LinkGenerator 生产对应 Uri避免硬编码app.MapGet(/context, (HttpContext httpContext) new
{Data httpContext.Connection.Id
}).WithName(hi);app.MapGet(hello, (LinkGenerator linker) $The link to the hello route is {linker.GetPathByName(hi, values: null)});除了 WithXXX 等一些列 RoutingEndpointConvention 扩展方法外还提供了 AuthorizationEndpointConvention 相关扩展方法 RequireAuthorization、AllowAnonymous 代替 MVC 模式中的相关特性特性也还可以用只是多了一个支持方式。本文只列出 Minimal APIs 的一些简单用法集成 Swagger 等用法内容参考https://minimal-apis.github.io/hello-minimal/接口的返回状态码和类型等可以通过扩展方法 Produces 说明如ProducesResponseMode(contentType:application/xml); 但是接口备注貌似还不支持我尝试了很多方式都不能正确显示。Code FormatMinimal APIs 上面示例存在的问题是 Program 文件中会有太多的编码所有路由的映射和响应都在一起虽然可以通过如下方式使用静态方法抽离响应方法但所有的 Route Map 还是列在一起不能像 Controller 一样分离。var handler new HelloHandler();app.MapGet(/, handler.Hello);class HelloHandler
{public string Hello(){return Hello World;}
}可以借助开源框架 MASA.Contrib提供的 MASA.Contrib.Service.MinimalAPIs 完成代码封装。详细用法参考 MASA.EShopProgram.csvar builder WebApplication.CreateBuilder(args);
var app builder.Services.AddServices(builder);
app.Run();HelloService.cspublic class HelloService : ServiceBase
{public HelloService(IServiceCollection services): base(services) App.MapGet(/api/v1/helloworld, ()Hello World));
}我们正在行动新的框架、新的生态我们的目标是自由的、易用的、可塑性强的、功能丰富的、健壮的。所以我们借鉴Building blocks的设计理念正在做一个新的框架MASA Framework它有哪些特点呢原生支持Dapr且允许将Dapr替换成传统通信方式架构不限单体应用、SOA、微服务都支持支持.Net原生框架降低学习负担除特定领域必须引入的概念坚持不造新轮子丰富的生态支持除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品核心代码库的单元测试覆盖率90%开源、免费、社区驱动还有什么我们在等你一起来讨论经过几个月的生产项目实践已完成POC目前正在把之前的积累重构到新的开源项目中目前源码已开始同步到Github文档站点在规划中会慢慢完善起来MASA.BuildingBlocksMASA.ContribMASA.UtilsMASA.EShopBlazorComponentMASA.BlazorQQ群7424099微信群加技术运营微信MasaStackTechOps备注来意邀请进群 ----- END ------作者简介马跃MASA技术团队成员。