fix: Accept params in export Accept header (Fixes #3876)#5625
Open
rtmalikian wants to merge 1 commit into
Open
fix: Accept params in export Accept header (Fixes #3876)#5625rtmalikian wants to merge 1 commit into
rtmalikian wants to merge 1 commit into
Conversation
The export endpoint's ValidateExportRequestFilterAttribute previously used exact string comparison for the Accept header value, rejecting requests with valid media type parameters like '; charset=utf-8'. .NET's HttpClient automatically appends '; charset=utf-8' to the Accept header, causing $export operations to fail with BadRequest when called from standard .NET HTTP clients (including Firely FhirClient). Fix by using MediaTypeHeaderValue.TryParse to properly parse the Accept header and comparing only the media type portion, ignoring parameters. Fixes microsoft#3876 Signed-off-by: Raphael Malikian <rtmalikian@gmail.com>
Author
|
@microsoft-github-policy-service agree |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #3876
Problem
The
$exportendpoint'sValidateExportRequestFilterAttributeuses exact string comparison for the Accept header value:This rejects requests where the Accept header contains valid media type parameters. .NET's
HttpClient(and the Firely FhirClient) automatically appends; charset=utf-8to the Accept header, causing$exportoperations to fail with:Solution
Replace the exact string comparison with proper media type parsing using
MediaTypeHeaderValue.TryParse, which correctly handles media type parameters:This extracts just the media type portion (
application/fhir+json) from values likeapplication/fhir+json; charset=utf-8, while still rejecting genuinely unsupported media types.Files Changed
src/Microsoft.Health.Fhir.Api/Features/Filters/ValidateExportRequestFilterAttribute.cs— Parse Accept header as media type instead of exact string matchsrc/Microsoft.Health.Fhir.Shared.Api.UnitTests/Features/Filters/ValidateExportRequestFilterAttributeTests.cs— Add test cases for Accept headers with charset and other parametersVerification
application/fhir+xml,application/xml,text/xml,application/json,*/*) continue to reject correctlyapplication/fhir+json; charset=utf-8,application/fhir+json;charset=utf-8,application/fhir+json; charset=UTF-8, andapplication/fhir+json; boundary=somethingare all acceptedMediaTypeHeaderValue.TryParseapproach properly handles edge cases (invalid headers returnfalseand are rejected)Changelog
Files Changed
src/Microsoft.Health.Fhir.Api/Features/Filters/ValidateExportRequestFilterAttribute.cs— Use MediaTypeHeaderValue.TryParse for Accept header validationsrc/Microsoft.Health.Fhir.Shared.Api.UnitTests/Features/Filters/ValidateExportRequestFilterAttributeTests.cs— Add Theory tests for Accept headers with media type parametersVerification
About the Author: Raphael Malikian — Clinical AI Solutions Architect. I specialise in building and fixing AI/ML systems for healthcare, including vector databases, RAG pipelines, and clinical NLP. If you need help with your project or think I can add value to your organisation, feel free to reach out — I'd love to connect.
📧 rtmalikian@gmail.com
🔗 GitHub: https://github.com/rtmalikian
🔗 LinkedIn: http://www.linkedin.com/in/raphael-t-malikian-mbbs-bsc-hons-71075436a
Disclosure: This code was developed with assistance from mimo-v2.5-pro (Xiaomi) via Hermes Agent (Nous Research). All changes were reviewed, tested against the actual codebase, and verified for correctness.