如何使用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
相关产品推荐
相关产品推荐

