少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述详解 .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 的使用方式】特殊响应头的安全增强中间件. | 推荐阅读
|