using Hl7.Fhir.Serialization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; public class FhirExceptionFilter : IExceptionFilter { private static readonly FhirJsonSerializer Serializer = new(); public void OnException(ExceptionContext context) { if (!context.HttpContext.Request.Path.StartsWithSegments("/fhir")) return; var outcome = FhirOperationOutcomeBuilder.FromException(context.Exception); var status = context.Exception switch { FhirMappingException fme => fme.HttpStatus, NotFoundException => 404, ValidationException => 422, ConflictException => 409, _ => 500 }; context.Result = new ContentResult { StatusCode = status, ContentType = "application/fhir+json", Content = Serializer.SerializeToString(outcome) }; context.ExceptionHandled = true; } }