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

基于HL7 FHIR的医疗应用POST XML注册患者时遇400 Bad Request错误

问题:FHIR医疗应用POST XML时返回400 Bad Request

我正在开发一款基于HL7 FHIR的医疗应用,尝试同时使用XML和JSON格式添加新记录,但在POST XML时始终收到400 Bad Request响应。

提交的XML内容

<Parameters xmlns="http://hl7.org/fhir">
  <parameter>
    <name value="registerPatient" />
    <resource>
      <Patient>
        <meta>
          <profile value="https://fhir.nhs.uk/STU3/StructureDefinition/CareConnect-GPC-Patient-1" />
        </meta>
        <identifier>
          <extension url="https://fhir.nhs.uk/STU3/StructureDefinition/Extension-CareConnect-GPC-NHSNumberVerificationStatus-1">
            <valueCodeableConcept>
              <coding>
                <system value="https://fhir.nhs.uk/STU3/CodeSystem/CareConnect-NHSNumberVerificationStatus-1" />
                <code value="01" />
                <display value="Number present and verified" />
              </coding>
            </valueCodeableConcept>
          </extension>
          <system value="https://fhir.nhs.uk/Id/nhs-number" />
          <value value="9651258500" />
        </identifier>
        <name>
          <use value="official" />
          <family value="REA" />
          <given value="Clive" />
        </name>
        <gender value="male" />
        <birthDate value="1951-10-03" />
      </Patient>
    </resource>
  </parameter>
</Parameters>

对应的Web API POST方法

[HttpPost]
[Route("Patient/$gpc.registerpatient")]
[ApiResponseType(StatusCodes.Status200OK, typeof(Bundle))]
[Consumes("application/fhir+xml")]
[SwaggerOperation(Summary = "Register Patient")]
public async Task<IActionResult> RegisterPatient([FromBody] Patient parameters)
{
    // 业务逻辑
}

问题原因与解决方法

核心问题

请求体类型不匹配:你提交的XML是FHIR的Parameters资源(将Patient作为参数嵌套其中),但API方法的[FromBody]参数声明为Patient类型,导致框架无法正确反序列化请求体,直接返回400错误。

解决步骤

  1. 修正API参数类型
    将方法参数从Patient改为Parameters,然后从Parameters中提取嵌套的Patient资源:

    public async Task<IActionResult> RegisterPatient([FromBody] Parameters parameters)
    {
        // 提取名为registerPatient的参数对应的Patient资源
        var patientParam = parameters.Parameter.FirstOrDefault(p => p.Name == "registerPatient");
        var patient = patientParam?.Resource as Patient;
        
        if (patient == null)
        {
            return BadRequest("未找到有效的Patient参数");
        }
        
        // 后续注册逻辑
    }
    
  2. 验证请求头
    确保POST请求的Content-Type头设置为application/fhir+xml,与API的[Consumes]注解一致。

  3. 额外检查
    确认XML符合FHIR STU3规范(你提交的XML结构、命名空间均符合要求,此步可作为兜底验证)。

内容的提问来源于stack exchange,提问作者Anil patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:57:36