in src/Microsoft.Health.Dicom.Api/Features/Filters/AcceptContentFilterAttribute.cs [54:99]
public override void OnActionExecuting(ActionExecutingContext context)
{
EnsureArg.IsNotNull(context, nameof(context));
IList<MediaTypeHeaderValue> acceptHeaders = context.HttpContext.Request.GetTypedHeaders().Accept;
bool acceptable = false;
// Validate the accept headers has one of the specified accepted media types.
if (acceptHeaders != null && acceptHeaders.Count > 0)
{
foreach (MediaTypeHeaderValue acceptHeader in acceptHeaders)
{
if (_allowMultiple && StringSegment.Equals(acceptHeader.MediaType, KnownContentTypes.MultipartRelated, StringComparison.InvariantCultureIgnoreCase))
{
NameValueHeaderValue typeParameterValue = acceptHeader.Parameters.FirstOrDefault(
parameter => StringSegment.Equals(parameter.Name, TypeParameter, StringComparison.InvariantCultureIgnoreCase));
if (typeParameterValue != null &&
MediaTypeHeaderValue.TryParse(HeaderUtilities.RemoveQuotes(typeParameterValue.Value), out MediaTypeHeaderValue parsedValue) &&
_mediaTypes.Contains(parsedValue))
{
acceptable = true;
break;
}
}
if (_allowSingle)
{
string[] split = acceptHeader.ToString().Split(';');
var stringHeaders = _mediaTypes.Select(x => x.ToString()).ToList();
if (split.Any(x => stringHeaders.Contains(x, StringComparer.InvariantCultureIgnoreCase)))
{
acceptable = true;
break;
}
}
}
}
if (!acceptable)
{
context.Result = new StatusCodeResult(NotAcceptableResponseCode);
}
base.OnActionExecuting(context);
}