ASP.NET Web API(.NET Framework 4.6.1)实现获取指定患者药物信息
实现GetMedications()方法返回特定患者药物信息的方案
嗨,我来帮你搞定这个方法的实现!结合你已经完成的基础,咱们一步步来:
第一步:确认Patient与Medication模型结构
首先得确保你的Patient类里包含了药物列表的属性,假设你的模型是这样的(根据实际业务调整属性即可):
using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using System.Collections.Generic; public class Patient { [BsonId] public ObjectId Id { get; set; } // MongoDB默认主键 public string PatientNumber { get; set; } // 你的患者唯一标识(比如病历号) public string FullName { get; set; } // 其他患者属性(年龄、性别、联系方式等)... public List<Medication> Medications { get; set; } = new List<Medication>(); } public class Medication { public string DrugName { get; set; } public string Dosage { get; set; } public string Frequency { get; set; } public DateTime StartDate { get; set; } // 其他药物属性(医嘱备注、停药日期等)... }
第二步:实现GetMedications()控制器方法
在你的PatientsController里,添加这个异步方法,核心逻辑是:根据患者标识找到对应的患者,返回其药物列表,同时处理患者不存在的异常情况。
完整代码示例
using MongoDB.Driver; using System.Threading.Tasks; using System.Web.Http; public class PatientsController : ApiController { private readonly IMongoCollection<Patient> _patientsCollection; // 构造函数:初始化MongoDB连接(推荐把配置放在Web.config,避免硬编码) public PatientsController() { // 从Web.config读取配置项 var connectionString = System.Configuration.ConfigurationManager.AppSettings["MongoDbAtlasConnection"]; var dbName = System.Configuration.ConfigurationManager.AppSettings["MongoDbDatabaseName"]; var client = new MongoClient(connectionString); var database = client.GetDatabase(dbName); _patientsCollection = database.GetCollection<Patient>("Patients"); } // 你已经实现的Get()方法(供参考) public async Task<IHttpActionResult> Get(string patientNumber) { var patient = await _patientsCollection.Find(p => p.PatientNumber == patientNumber).FirstOrDefaultAsync(); if (patient == null) { return NotFound(); } return Ok(patient); } // 要实现的GetMedications()方法 [HttpGet] [Route("api/patients/{patientNumber}/medications")] public async Task<IHttpActionResult> GetMedications(string patientNumber) { try { // 查询指定患者 var patient = await _patientsCollection.Find(p => p.PatientNumber == patientNumber).FirstOrDefaultAsync(); // 处理患者不存在的情况 if (patient == null) { return NotFound(new { Message = $"患者编号 {patientNumber} 不存在,请检查输入。" }); } // 返回该患者的药物列表 return Ok(patient.Medications); } catch (System.Exception ex) { // 这里可以添加日志记录,返回友好的错误提示 return InternalServerError(new System.Exception($"获取药物信息时出错:{ex.Message}")); } } }
第三步:关键细节调整
连接字符串配置:把MongoDB Atlas的连接字符串放在
Web.config的appSettings里,避免硬编码:<configuration> <appSettings> <add key="MongoDbAtlasConnection" value="mongodb+srv://你的用户名:密码@集群地址/数据库名?retryWrites=true&w=majority" /> <add key="MongoDbDatabaseName" value="你的数据库名称" /> </appSettings> </configuration>患者标识的类型适配:如果你的患者用MongoDB的
ObjectId作为唯一标识,需要调整参数和查询逻辑:[HttpGet] [Route("api/patients/{id}/medications")] public async Task<IHttpActionResult> GetMedications(string id) { // 验证ObjectId格式合法性 if (!ObjectId.TryParse(id, out ObjectId patientId)) { return BadRequest("无效的患者ID格式"); } var patient = await _patientsCollection.Find(p => p.Id == patientId).FirstOrDefaultAsync(); // 后续逻辑同上 }路由配置:确保
Route属性的路径符合你的API路由规则,或者直接复用默认路由(如果WebApiConfig里已经配置了api/{controller}/{id})。
这样就能顺利实现根据患者标识返回其药物信息的功能啦!
内容的提问来源于stack exchange,提问作者sd-mustang
相关产品推荐
相关产品推荐

