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

使用Hl7.Fhir.STU3的FhirClient未正确设置AdverseEvent的versionId

问题分析

你遇到的核心问题是混淆了FHIR规范中VersionId的用途,以及服务器对PSIMS Taxonomy版本的要求:

  • FHIR资源的VersionId属性(对应JSON中的_versionId)是服务器用来管理资源版本的标识,客户端创建资源时不需要手动设置,服务器会自动生成。
  • 你尝试设置的5.0.0是PSIMS Taxonomy的业务版本,而非FHIR资源的服务器版本,错误地放到VersionId属性后,序列化时出现异常,导致服务器接收不到正确版本号,返回Version '0'的错误。
解决方案

1. 移除错误的VersionId设置

首先删除代码中对AdverseEvent.VersionId的赋值,该属性由服务器维护,创建资源时无需指定:

var adverseEvent = new AdverseEvent()
{
   Meta = new Meta()
   {
       Profile = new string[] { "https://psims-uat.azure-api.net/taxonomy/fhir/StructureDefinition/patient-safety-adverse-event-5" }
   }
   // 移除VersionId = "5.0.0"这一行
};

2. 正确传递PSIMS Taxonomy版本

根据你Postman测试的结果,服务器期望版本号出现在资源根节点,而FHIR规范中根节点没有自定义versionId的位置,需按以下方式处理:

  • 如果服务器要求根节点的versionId是自定义字段,通过FHIR扩展实现:
    // 添加自定义扩展,对应根节点的versionId字段
    adverseEvent.AddExtension("https://psims-uat.azure-api.net/taxonomy/extension/version-id", new FhirString("5.0.0"));
    
  • 若服务器实际期望版本号包含在Meta信息中,设置Meta.VersionId:
    Meta = new Meta()
     {
         Profile = new string[] { "https://psims-uat.azure-api.net/taxonomy/fhir/StructureDefinition/patient-safety-adverse-event-5" },
         VersionId = "5.0.0" // 将版本号放在Meta的VersionId中
     }
    

3. 验证序列化结果

调整代码后,先序列化AdverseEvent为JSON,确认版本号出现在服务器要求的位置(根节点或Meta中),再发送请求:

var serializer = new FhirJsonSerializer(new SerializerSettings { Pretty = true });
string json = serializer.SerializeToString(adverseEvent);
// 检查json格式是否与Postman中正确的格式一致

4. 规范FhirClient配置

确保FhirClient使用STU3对应的序列化配置,避免序列化异常:

var settings = new FhirClientSettings
{
    PreferredFormat = ResourceFormat.Json,
    UseFormatParam = true
};
var fhirClient = new FhirClient(uri, settings, _handler);
return await fhirClient.CreateAsync<AdverseEvent>(adverseEvent);

内容的提问来源于stack exchange,提问作者Mark Cooper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:55:29