The acceptable content types for a Response returned for this instance.
This list is determined by parsing the Accept header (or the concatenation
of multiple Accept headers). The list is ordered such the more desirable
content-types appear earlier in the list. Desirability is determined by
a q-value (if one exists) and the specificity of the content-type.
See also acceptsContentType.
Source
List<ContentType> get acceptableContentTypes {
if (_cachedAcceptableTypes == null) {
try {
var contentTypes = innerRequest
.headers[HttpHeaders.ACCEPT]
?.expand((h) => h.split(",").map((s) => s.trim()))
?.where((h) => h.isNotEmpty)
?.map((h) => ContentType.parse(h))
?.toList() ?? [];
contentTypes.sort((c1, c2) {
num q1 = num.parse(c1.parameters["q"] ?? "1.0");
num q2 = num.parse(c2.parameters["q"] ?? "1.0");
var comparison = q1.compareTo(q2);
if (comparison == 0) {
if (c1.primaryType == "*" && c2.primaryType != "*") {
return 1;
} else if (c1.primaryType != "*" && c2.primaryType == "*") {
return -1;
}
if (c1.subType == "*" && c2.subType != "*") {
return 1;
} else if (c1.subType != "*" && c2.subType == "*") {
return -1;
}
}
return -comparison;
});
_cachedAcceptableTypes = contentTypes;
} catch (_) {
throw new HTTPResponseException(400, "Accept header is malformed");
}
}
return _cachedAcceptableTypes;
}