.NET新手求助:将MongoDB Minimal API请求迁移至PersonController
迁移Minimal API到PersonController步骤
1. 配置MongoDB依赖注入
首先在Program.cs中注册MongoDB客户端和Person集合,让控制器可以通过依赖注入获取集合实例:
// 替换为你的MongoDB连接字符串、数据库名和集合名 var mongoConnectionString = "mongodb://localhost:27017"; var databaseName = "YourDatabaseName"; var collectionName = "users"; builder.Services.AddSingleton<IMongoClient>(new MongoClient(mongoConnectionString)); builder.Services.AddSingleton<IMongoCollection<Person>>(sp => { var client = sp.GetRequiredService<IMongoClient>(); var database = client.GetDatabase(databaseName); return database.GetCollection<Person>(collectionName); });
2. 创建PersonController类
在项目中新建Controllers文件夹,添加PersonController.cs文件,继承ControllerBase并配置API控制器特性:
using Microsoft.AspNetCore.Mvc; using MongoDB.Driver; [ApiController] [Route("api/users")] // 保持和原Minimal API一致的路由 public class PersonController : ControllerBase { private readonly IMongoCollection<Person> _personCollection; // 构造函数注入MongoDB集合 public PersonController(IMongoCollection<Person> personCollection) { _personCollection = personCollection; } // 对应原MapGet("/api/users") [HttpGet] public async Task<ActionResult<List<Person>>> GetAllUsers() { var users = await _personCollection.Find("{}").ToListAsync(); return Ok(users); } // 对应原MapGet("/api/users/{id}") [HttpGet("{id}")] public async Task<ActionResult<Person>> GetUserById(string id) { var user = await _personCollection.Find(p => p.Id == id).FirstOrDefaultAsync(); if (user == null) { return NotFound(new { message = "User is not found" }); } return Ok(user); } // 对应原MapDelete("/api/users/{id}") [HttpDelete("{id}")] public async Task<ActionResult<Person>> DeleteUser(string id) { var deletedUser = await _personCollection.FindOneAndDeleteAsync(p => p.Id == id); if (deletedUser == null) { return NotFound(new { message = "User is not found" }); } return Ok(deletedUser); } // 对应原MapPost("/api/users") [HttpPost] public async Task<ActionResult<Person>> CreateUser(Person user) { await _personCollection.InsertOneAsync(user); return CreatedAtAction(nameof(GetUserById), new { id = user.Id }, user); } // 对应原MapPut("/api/users") [HttpPut] public async Task<ActionResult<Person>> UpdateUser(Person userData) { var updatedUser = await _personCollection.FindOneAndReplaceAsync( p => p.Id == userData.Id, userData, new FindOneAndReplaceOptions<Person> { ReturnDocument = ReturnDocument.After }); if (updatedUser == null) { return NotFound(new { message = "User is not found" }); } return Ok(updatedUser); } }
3. 清理原Minimal API代码
删除Program.cs中所有app.MapGet/MapPost/MapPut/MapDelete的Minimal API端点配置,避免路由冲突。
关键说明
- 控制器通过依赖注入获取MongoDB集合,避免硬编码数据库连接,符合.NET开发规范。
- 使用
ActionResult<T>返回类型替代原Minimal API的Results方法,这是API控制器的标准写法,框架会自动处理HTTP状态码和序列化。 - 创建用户时使用
CreatedAtAction返回201状态码,并附带新资源的访问链接,比原代码更贴合REST规范。
内容的提问来源于stack exchange,提问作者Xerdriver
相关产品推荐
相关产品推荐

