read static method
Implementation
static Future<RequestBody> read(HttpRequest request) async {
ContentType? contentType = request.headers.contentType;
if (contentType == null) return RequestBody.empty();
if (HttpBody.isJson(contentType)) {
Uint8List bytes = await readBytes(request, Dox().config.maxBodySize);
if (bytes.isEmpty) {
return RequestBody.empty();
}
try {
Object? data = _jsonUtf8.convert(bytes);
return RequestBody(
data is Map<String, dynamic> ? data : <String, dynamic>{},
kind: BodyKind.json,
json: data,
);
} catch (err) {
return RequestBody(<String, dynamic>{}, kind: BodyKind.invalidJson);
}
}
if (HttpBody.isFormData(contentType)) {
int max = Dox().config.maxMultipartSize;
_checkContentLength(request, max);
FormDataVisitor visitor = FormDataVisitor(request, limit(request, max));
await visitor.process();
return RequestBody(
visitor.inputs,
kind: BodyKind.multipart,
parts: visitor.parts,
);
}
if (HttpBody.isUrlEncoded(contentType)) {
Uint8List bytes = await readBytes(request, Dox().config.maxBodySize);
String text = utf8.decode(bytes, allowMalformed: true);
Map<String, dynamic> map = <String, dynamic>{};
try {
map = Uri.splitQueryString(text);
} catch (err) {
/// bad percent encoding: an empty body
}
return RequestBody(map, kind: BodyKind.urlEncoded, text: text);
}
return RequestBody(<String, dynamic>{}, kind: BodyKind.other);
}