随着 .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:6666
如果设置多个监听的URL地址的话可以在多个地址之间使用分号;隔开多个值:
ASPNETCORE_URLS=http://localhost:6666;https://localhost:8888
如果想监听本机所有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:9999
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")