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

Azure Function调用FHIR服务报错:Accept头不支持及OperationAsync方法疑问

FHIR客户端OperationAsync方法疑问及报错分析

问题背景

我有一个用于调用FHIR服务的Azure Function,代码如下:

var resultBundle = await fhirClient.OperationAsync(
    operation: new Uri($"{_config.GetValue<string>($"FhirServerUrl")}/Location/$getAllLocationsForFacility?coid={request.coid}&status=active"), 
    useGet: true) as Bundle;

执行该行代码时出现以下错误:

Executed 'Azure_Function_FunctionName' (Failed, Id=73423f7676-68d9-809d-s998-87867676969, Duration=21130ms)
[2024-02-26T07:10:35.843Z] System.Private.CoreLib: Exception while executing function: Azure_Function_FunctionName. Hl7.Fhir.DSTU2.Core: Operation was unsuccessful because of a client error (NotAcceptable). OperationOutcome: Overall result: FAILURE (1 errors and 0 warnings)
[2024-02-26T07:10:35.847Z]
[2024-02-26T07:10:35.848Z] [ERROR] (no details)(further diagnostics: Value supplied for the "Accept" header is not supported.).

已查阅.NET的FHIR文档,但未找到fhirClient.OperationAsync()方法的定义,请问该方法相关信息及报错原因是什么?


一、OperationAsync方法相关信息

  • 该方法属于Hl7.Fhir.DSTU2.Rest.FhirClient类(从错误日志中的Hl7.Fhir.DSTU2.Core可判断使用的是FHIR DSTU2版本的客户端库),是用于调用自定义FHIR操作(即$operation格式服务端接口)的异步方法。
  • 核心参数说明:
    • operation:自定义操作的完整URI,包含服务端地址、目标资源类型、操作名称及查询参数;
    • useGet:指定请求方式,true为GET请求,false为POST请求;
  • 方法默认返回Resource类型对象,你代码中转为Bundle是FHIR自定义操作常见的返回格式。
  • 找不到文档的原因:DSTU2版本的FHIR .NET库文档较为陈旧,且该方法属于客户端底层操作方法,未在核心文档显著位置标注,可通过IDE智能提示或直接查看类源码获取详细定义。

二、报错原因及解决办法

报错原因

错误日志明确指出Value supplied for the "Accept" header is not supported,即客户端发送的HTTP Accept请求头格式不被FHIR服务端兼容。

  • FHIR服务端通常要求Accept头为标准FHIR媒体类型,如application/fhir+json或application/fhir+xml;
  • 旧版本FhirClient在调用自定义操作时,可能默认发送的Accept头不符合服务端要求,导致返回406 Not Acceptable错误。

解决办法

  1. 显式设置请求格式:调用OperationAsync前,通过FhirClient的属性指定服务端支持的格式:
// 根据服务端支持类型二选一,优先选json
fhirClient.PreferredFormat = ResourceFormat.Json;
// fhirClient.PreferredFormat = ResourceFormat.Xml;
  1. 自定义请求头:如果上述方式无效,可直接添加自定义Accept头:
fhirClient.OnBeforeRequest += (sender, e) =>
{
    e.RawRequest.Headers.Accept.Clear();
    e.RawRequest.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/fhir+json"));
};
  1. 验证服务端支持格式:可调用FHIR服务端的元数据接口({FhirServerUrl}/metadata),查询其支持的媒体类型列表,确保设置的Accept头匹配。

内容的提问来源于stack exchange,提问作者Jyothish Bhaskaran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:07:45