You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}"));
        }
    }
}

第三步:关键细节调整

  1. 连接字符串配置:把MongoDB Atlas的连接字符串放在Web.config的appSettings里,避免硬编码:

    <configuration>
      <appSettings>
        <add key="MongoDbAtlasConnection" value="mongodb+srv://你的用户名:密码@集群地址/数据库名?retryWrites=true&w=majority" />
        <add key="MongoDbDatabaseName" value="你的数据库名称" />
      </appSettings>
    </configuration>
    
  2. 患者标识的类型适配:如果你的患者用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();
        // 后续逻辑同上
    }
    
  3. 路由配置:确保Route属性的路径符合你的API路由规则,或者直接复用默认路由(如果WebApiConfig里已经配置了api/{controller}/{id})。

这样就能顺利实现根据患者标识返回其药物信息的功能啦!

内容的提问来源于stack exchange,提问作者sd-mustang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:23:51