从MVC到Minimal APIs:基于ASP.NET Core 6.0的实现 - Ben Foster
从2007年ASP.NET MVC的引入,到2012年ASP.NET Web API的推出,再到如今的ASP.NET Core 6.0,微软的Web开发框架经历了显著的演变。这些框架从最初的模型-视图-控制器(MVC)模式,到支持构建轻量级HTTP API的Minimal APIs,体现了对开发者需求的不断适应和优化。本文将详细探讨从MVC到Minimal APIs的转变,并通过ASP.NET Core 6.0的示例,帮助开发者更好地理解如何利用Minimal APIs构建现代化的HTTP服务。
自举与框架初始化
MVC的初始化方式
在传统的ASP.NET Core MVC中,应用程序的初始化通常通过Startup类完成。然而,ASP.NET Core 6.0引入了顶级语句的支持,简化了初始化过程。现在,所有的引导代码都集中在一个Program.cs文件中:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();
上述代码中,AddControllers()方法用于注册MVC框架的依赖项,而MapControllers()则负责注册控制器的路由和中间件。
Minimal APIs的初始化方式
Minimal APIs通过更简洁的方式实现了类似的功能。以下是一个典型的Minimal APIs初始化示例:
var app = WebApplication.CreateBuilder(args).Build();
app.MapGet("/", () => "Hello World!");
app.Run();
可以看到,Minimal APIs的初始化代码更加简洁,适合构建轻量级的HTTP服务。
路由定义与处理程序
MVC中的路由定义
在MVC中,路由可以通过两种方式定义:基于约定的路由和基于属性的路由。
-
基于约定的路由:通常用于网站开发,路由规则在
Program.cs中定义,例如:app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); -
基于属性的路由:更适合API开发,通过在控制器或操作方法上添加路由属性实现,例如:
[Route("api/[controller]")] [ApiController] public class WeatherForecastController : ControllerBase { [HttpGet] public IEnumerable Get() { ... } }
Minimal APIs中的路由定义
Minimal APIs通过MapGet、MapPost等方法定义路由。例如:
app.MapGet("/weatherforecast", () => new[] { "Sunny", "Rainy" });
此外,Minimal APIs还支持通过MapMethods定义自定义HTTP动词的路由。
模型绑定
模型绑定是从HTTP请求中提取数据并将其转换为.NET类型的过程。
MVC中的模型绑定
在MVC中,可以通过以下方式实现模型绑定:
-
从请求体绑定JSON数据:
[HttpPost] public IActionResult Create([FromBody] WeatherForecast forecast) { ... } -
从查询字符串绑定复杂类型:
[HttpGet] public IActionResult Search([FromQuery] SearchParameters parameters) { ... } -
绑定简单类型:简单类型会自动从路由或查询字符串中绑定。
Minimal APIs中的模型绑定
Minimal APIs的模型绑定与MVC类似,但更为简洁。例如:
app.MapPost("/create", (WeatherForecast forecast) => { ... });
需要注意的是,Minimal APIs目前不支持通过[FromQuery]绑定复杂类型。
HTTP响应
无论是MVC还是Minimal APIs,都支持将返回类型自动序列化为HTTP响应。
MVC中的HTTP响应
在MVC中,可以通过返回IActionResult来生成响应,例如:
public IActionResult Get()
{
return Ok(new { Message = "Success" });
}
Minimal APIs中的HTTP响应
Minimal APIs通过IResult实现类似功能。例如:
app.MapGet("/success", () => Results.Ok(new { Message = "Success" }));
依赖注入
依赖注入(DI)是ASP.NET Core的重要特性,MVC和Minimal APIs均支持DI。
MVC中的依赖注入
在MVC中,依赖项通常通过构造函数注入:
public class WeatherForecastController : ControllerBase
{
private readonly IWeatherService _service;
public WeatherForecastController(IWeatherService service)
{
_service = service;
}
}
Minimal APIs中的依赖注入
Minimal APIs则通过将依赖项作为参数传递给处理程序实现:
app.MapGet("/forecast", (IWeatherService service) => service.GetForecast());
授权与安全
ASP.NET Core的授权机制同样适用于MVC和Minimal APIs。
MVC中的授权
在MVC中,可以通过[Authorize]属性声明授权需求,例如:
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly() { ... }
Minimal APIs中的授权
Minimal APIs通过在路由定义中附加元数据实现授权,例如:
app.MapGet("/admin", [Authorize] () => "Admin Area");
总结
Minimal APIs为开发者提供了一种轻量级的替代方案,适用于构建简单、高效的HTTP服务。与MVC相比,Minimal APIs的主要优势在于其简洁性和灵活性,开发者可以根据需求选择所需的功能组件,而无需引入不必要的复杂性。在实际开发中,可以根据项目的规模和需求,灵活选择MVC或Minimal APIs作为技术栈的一部分。
原文链接: https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- API协议设计的10种技术
- ComfyUI API是什么:深入探索ComfyUI的API接口与应用
- 从架构设计侧剖析: MCP vs A2A 是朋友还是对手?
- Kimi Chat API入门指南:从注册到实现智能对话
- 免费查询公司注册信息API的使用指南
- 防御 API 攻击:保护您的 API 和数据的策略
- 香港支付宝实名认证:是什么?怎么用?
- 如何获取 Coze开放平台 API 密钥(分步指南)
- 如何保护您的API免受自动化机器人和攻击 | Zuplo博客
- ASP.NET Core Minimal APIs 入门指南 – JetBrains 博客
- 什么是 OpenReview
- Vue中使用echarts@4.x中国地图及AMap相关API的使用