详解 .Net6 Minimal API 的使用方式

Posted 编程宝库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解 .Net6 Minimal API 的使用方式相关的知识,希望对你有一定的参考价值。

随着 .Net6 的发布,微软也改进了对之前 ASP.NET Core 构建方式,使用了新的 Minimal API 模式。以前默认的方式是需要在 Startup 中注册 IOC 和中间件相关,但是在 Minimal API 模式下你只需要简单的写几行代码就可以构建一个 ASP.NET Core的Web 应用,可谓非常的简单,加之配合 c# 的 global using 和 Program 的顶级声明方式,使得 Minimal API 变得更为简洁,不得不说 .NET 团队在 .NET 上近几年下了不少功夫,接下来我们就来大致介绍下这种极简的使用模式。

1. 使用方式

使用 Visual Studio 2022 新建的 ASP.NET Core 6 的项目,默认的方式就是 Minimal API 模式,整个 Web 程序的结构看起来更加简单,再i加上微软对 Lambda 的改进,使其可以对 Lambda 参数进行 Attribute 标记,有的场景甚至可以放弃去定义 Controller 类了。

2. 几行代码构建Web程序

使用 Minimal API 最简单的方式就是能通过三行代码就可以构建一个 WebApi 的程序,代码如下:


var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World");
app.Run()

是的你没有看错,仅仅这样运行起来就可以,默认监听的 http://localhost:5000 和 https://localhost:5001,所以直接在浏览器输入http://localhost:5000地址就可以看到浏览器输出Hello World字样。

3. 更改监听地址

如果你想更改它监听的服务端口,可以使用如下的方式:


var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World");
app.Run("http://localhost:6666")

如果想同时监听多个端口的话,可以使用如下的方式:


var app = WebApplication.Create(args);
app.Urls.Add("http://localhost:6666");
app.Urls.Add("http://localhost:8888");
app.MapGet("/", () => "Hello World");
app.Run()

或者是直接通过环境变量的方式设置监听信息,设置环境变量ASPNETCORE_URLS的值为完整的监听URL地址,这样的话就可以直接省略了在程序中配置相关信息了。


ASPNETCORE_URLS=http://localhost:666

如果设置多个监听的URL地址的话可以在多个地址之间使用分号;隔开多个值:


ASPNETCORE_URLS=http://localhost:6666;https://localhost:888

如果想监听本机所有Ip地址,可以使用如下方式:


var app = WebApplication.Create(args);
app.Urls.Add("http://*:6666");
app.Urls.Add("http://+:8888");
app.Urls.Add("http://0.0.0.0:9999");
app.MapGet("/", () => "Hello World");
app.Run()

同样的也可以使用添加环境变量的方式添加监听地址:


ASPNETCORE_URLS=http://*:6666;https://+:8888;http://0.0.0.0:999

4. 日志操作

日志操作也是比较常用的操作,在Minimal API中微软干脆把它提出来,直接简化了操作,如下所示:


var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddJsonConsole();
var app = builder.Build();
app.Logger.LogInformation("读取到的配置信息:{content}", builder.Configuration.GetSection("consul").Get<ConsulOption>());
app.Run()

5. 基础环境配置

无论我们在之前的.Net Core开发或者现在的.Net6开发都有基础环境的配置,它包括 ApplicationName、ContentRootPath、 EnvironmentName相关,不过在Minimal API中,可以通过统一的方式去配置:


var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
ApplicationName = typeof(Program).Assembly.FullName,
ContentRootPath = Directory.GetCurrentDirectory(),
EnvironmentName = Environments.Staging
});
Console.WriteLine($"应用程序名称: {builder.Environment.ApplicationName}");
Console.WriteLine($"环境变量: {builder.Environment.EnvironmentName}");
Console.WriteLine($"ContentRoot目录: {builder.Environment.ContentRootPath}");
var app = builder.Build()

或者是通过环境变量的方式去配置,最终实现的效果都是一样的。 - ASPNETCORE_ENVIRONMENT - ASPNETCORE_CONTENTROOT - ASPNETCORE_APPLICATIONNAME

6. 主机相关设置

我们在之前的.Net Core开发模式中,程序的启动基本都是通过构建主机的方式,比如之前的Web主机或者后来的泛型主机,在Minimal API中同样可以进行这些操作,比如我们模拟一下之前泛型主机配置Web程序的方式:


var builder = WebApplication.CreateBuilder(args);
builder.Host.ConfigureDefaults(args).ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
var app = builder.Build()

如果只是配置Web主机的话Minimal API还提供了另一种更直接的方式,如下所示:


var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseStartup<Startup>();
builder.WebHost.UseWebRoot("webroot");
var app = builder.Build()

7. 默认容器替换

很多时候我们在使用IOC的时候会使用其他三方的IOC框架,比如大家耳熟能详的Autofac,我们之前也介绍过其本质方式就是使用UseServiceProviderFactory中替换容器的注册和服务的提供,在Minimal API中可以使用如下的方式去操作:


var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
//之前在Startup中配置ConfigureContainer可以使用如下方式
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));
var app = builder.Build()

8. 中间件相关

相信大家都已经仔细看过了WebApplication.CreateBuilder(args).Build()通过这种方式构建出来的是一个WebApplication类的实例,而WebApplication正是实现了 IApplicationBuilder接口。所以其本质还是和我们之前使用Startup中的Configure方法的方式是一致的,比如我们配置一个Swagger程序为例:


var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
//判断环境变量
if (app.Environment.IsDevelopment())
{
//异常处理中间件
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI();
}
//启用静态文件
app.UseStaticFiles();
app.UseAuthorization();
app.MapControllers();
app.Run()

常用的中间件配置还是和之前是一样的,因为本质都是​​IApplicationBuilder​​的扩展方法,我们这里简单列举一下:

Authentication

认证中间件

​app.UseAuthentication()​

Authorization

授权中间件.

​app.UseAuthorization()​

CORS

跨域中间件.

​app.UseCors()​

Exception Handler

全局异常处理中间件.

​app.UseExceptionHandler()​

Forwarded Headers

代理头信息转发中间件.

​app.UseForwardedHeaders()​

HTTPS Redirection

Https重定向中间件.

​app.UseHttpsRedirection()​

HTTP Strict Transport Security (HSTS)

特殊响应头的安全增强中间件.

.NET6中关于Minimal API的简单使用

简单聊下.NET6 Minimal API的使用方式

.NET6gRPC服务端和客户端开发案例,以及minimal API服务gRPC服务和传统webapi服务的访问效率大对决

.NET 6 迁移到 Minimal API

.Net Minimal API 介绍

.NET 6开发minimal api以及依赖注入的实现和代码演示

(c)2006-2024 SYSTEM All Rights Reserved IT常识