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

如何使用Hl7.Fhir.Rest客户端检索HealthcareService并解决NHS FHIR接口报错

问题根因
  • 你错误将自定义FHIR操作的完整路径作为基础地址传给FhirClient,FhirClient的构造参数应为FHIR服务的根地址,不能带上具体资源路径和操作名
  • 你调用了标准的Search<T>()方法,但NHS该接口是自定义操作(以$开头),不是标准的HealthcareService资源搜索接口,方法不匹配导致返回的结构不符合FhirClient的解析预期,才抛出没有resourceType的错误
修复后的代码实现
var settings = new FhirClientSettings
{
    Timeout = 10,
    PreferredFormat = ResourceFormat.Json,
    PreferredReturn = Prefer.ReturnMinimal,
};

// 修正FHIR服务根地址,不要带具体资源和操作路径
var client = new FhirClient("https://sandbox.api.service.nhs.uk/referrals/FHIR/STU3", settings);
client.RequestHeaders.Add("Authorization", "Bearer g1112R_ccQ1Ebbb4gtHBP1aaaNM");
client.RequestHeaders.Add("nhsd-ers-ods-code", "R69");
client.RequestHeaders.Add("nhsd-ers-business-function", "REFERRING_CLINICIAN");
client.RequestHeaders.Add("X-Correlation-Id", Guid.NewGuid().ToString());

// 构造自定义操作的入参,根据NHS接口规范传入必填参数
var parameters = new Parameters();
parameters.Add("patient", "此处替换为实际的患者ID");
// 按需添加其他可选参数,比如serviceType、location等

// 调用自定义$ers.searchHealthcareServicesForPatient操作
var result = client.TypeOperation<HealthcareService>(
    operationName: "$ers.searchHealthcareServicesForPatient",
    parameters: parameters,
    useGet: true);

// 从返回结果中提取HealthcareService资源列表
var services = result.Resource
    .ToBundle()
    .Entry
    .Select(e => e.Resource as HealthcareService)
    .ToList();
额外注意事项
  • 你需要根据NHS接口的参数要求补全Parameters里的参数,必填参数缺失也会导致接口返回异常结构
  • 如果调用时还是有解析异常,可以先抓包查看接口返回的原始报文,确认返回结构是否符合STU3的FHIR规范,部分接口可能会返回自定义外层结构,这种情况下你需要先用普通HttpClient获取原始报文,手动处理后再用FHIR序列化工具解析内部的资源内容

内容的提问来源于stack exchange,提问作者Steve Borman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:04