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错误。
解决办法
- 显式设置请求格式:调用
OperationAsync前,通过FhirClient的属性指定服务端支持的格式:
// 根据服务端支持类型二选一,优先选json fhirClient.PreferredFormat = ResourceFormat.Json; // fhirClient.PreferredFormat = ResourceFormat.Xml;
- 自定义请求头:如果上述方式无效,可直接添加自定义
Accept头:
fhirClient.OnBeforeRequest += (sender, e) => { e.RawRequest.Headers.Accept.Clear(); e.RawRequest.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/fhir+json")); };
- 验证服务端支持格式:可调用FHIR服务端的元数据接口(
{FhirServerUrl}/metadata),查询其支持的媒体类型列表,确保设置的Accept头匹配。
内容的提问来源于stack exchange,提问作者Jyothish Bhaskaran
相关产品推荐
相关产品推荐

