详解 .Net6 Minimal API 的使用方式

本文详细介绍了 .NET6 的 Minimal API,这是一种简化 ASP.NET Core Web 应用开发的新模式。通过几行代码即可快速构建 Web 程序,支持更改监听地址、日志操作、基础环境配置等功能。文章涵盖了从使用方式到模型绑定的各个关键点,揭示了 Minimal API 的简洁性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着 .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");

var app = builder.Build<
<think>嗯,用户问的是关于WebAPI的Program.cs示例代码或如何编写入口文件。首先,我需要回忆一下ASP.NET Core的结构,特别是从.NET 6开始使用Minimal API模式。用户提供的引用中有提到引用[1]和引用[4],里面涉及了Program.cs的配置和读取appsettings.json,所以可能需要结合这些信息。 首先,用户可能正在创建一个新的Web API项目,需要知道基本的入口文件结构。引用[1]提到使用dotnet new webapi命令创建项目,这会生成一个基本的Program.cs。需要确认在.NET 6及更高版本中,Program.cs没有Startup类,而是把所有配置放在Program.cs里。 然后,用户可能需要示例代码。根据引用[1]和引用[4],示例代码应该包括创建WebApplicationBuilder,配置服务如Swagger、数据库上下文(比如Entity Framework Core),以及中间件如路由、授权、Swagger等。还要注意如何读取配置文件,比如appsettings.json,这在引用[4]中提到过,可以通过builder.Configuration来获取配置。 另外,用户可能关心如何集成Entity Framework,引用[2]讨论的是Code First方法,所以在示例代码中添加AddDbContext是必要的,同时构造函数中的DbContextOptions参数,如引用[4]中的OracleDbContext示例,需要确保上下文类有正确的构造函数。 还要考虑路由和控制器的配置,引用[3]中的DicomController使用了[ApiController]属性,所以可能需要确认控制器是否被正确注册,或者是否使用Minimal API的路由方式。不过根据传统MVC模式,添加控制器应该通过builder.Services.AddControllers(),然后使用MapControllers()。 另外,中间件的顺序很重要,比如UseHttpsRedirection、UseAuthorization、UseSwagger等,需要按正确的顺序排列。例如,开发环境下用UseSwagger,生产环境可能需要不同的设置。 用户可能还需要知道如何运行应用程序,所以app.Run()是必要的。此外,配置Swagger可以帮助测试API,所以包括AddSwaggerGen和对应的UI设置。 最后,生成相关问题时要考虑用户可能的后续疑问,比如配置数据库连接、环境区分、日志或中间件扩展等,这些都是在开发Web API时常见的问题。</think>### 关于Web API的Program.cs实现详解 #### 1. **基础结构(.NET 6+ Minimal API模式)** 从.NET 6开始,ASP.NET Core采用 **Minimal API** 模式,将启动配置集中在`Program.cs`中[^1][^4]。以下是一个基础示例: ```csharp var builder = WebApplication.CreateBuilder(args); // 添加服务配置 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // 中间件配置 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); ``` #### 2. **核心功能扩展** - **数据库集成(Entity Framework Core)** 通过Code First方式连接数据库[^2][^4]: ```csharp builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default"))); ``` 需在`appsettings.json`中配置连接字符串: ```json { "ConnectionStrings": { "Default": "Server=.;Database=MyDb;Trusted_Connection=True;" } } ``` - **自定义控制器路由** 若需修改控制器路由规则,可调整以下配置[^3]: ```csharp builder.Services.Configure<RouteOptions>(options => { options.LowercaseUrls = true; // 强制URL小写 }); ``` #### 3. **完整增强版示例** ```csharp using Microsoft.EntityFrameworkCore; using Microsoft.OpenApi.Models; var builder = WebApplication.CreateBuilder(args); // 读取配置文件 var configuration = builder.Configuration; // 注册服务 builder.Services.AddControllers(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); }); // 添加数据库上下文 builder.Services.AddDbContext<OracleDbContext>(options => options.UseOracle(configuration.GetConnectionString("OracleConnection")) ); var app = builder.Build(); // 中间件管道 app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); // 开发环境特殊配置 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1")); } app.Run(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值