diff --git a/src/kemal/context.cr b/src/kemal/context.cr index 0afce4e..26836e8 100644 --- a/src/kemal/context.cr +++ b/src/kemal/context.cr @@ -9,7 +9,11 @@ class HTTP::Server def params @request.url_params ||= route_lookup.params - @params ||= Kemal::ParamParser.new(@request) + @params ||= if @request.param_parser + @request.param_parser.not_nil! + else + Kemal::ParamParser.new(@request) + end end def redirect(url, status_code = 302) diff --git a/src/kemal/param_parser.cr b/src/kemal/param_parser.cr index 69d3adf..4a46eb9 100644 --- a/src/kemal/param_parser.cr +++ b/src/kemal/param_parser.cr @@ -75,8 +75,20 @@ module Kemal end end - def parse_part(part) - HTTP::Params.parse(part.to_s || "") + def parse_part(part : IO?) + if part + HTTP::Params.parse(part.gets_to_end) + else + HTTP::Params.parse("") + end + end + + def parse_part(part : String?) + if part + HTTP::Params.parse(part.to_s) + else + HTTP::Params.parse("") + end end end end diff --git a/src/kemal/request.cr b/src/kemal/request.cr index 71eba31..18fee5e 100644 --- a/src/kemal/request.cr +++ b/src/kemal/request.cr @@ -2,6 +2,7 @@ class HTTP::Request property override_method property url_params : Hash(String, String)? + getter param_parser : Kemal::ParamParser? def override_method @override_method ||= check_for_method_override! @@ -18,7 +19,8 @@ class HTTP::Request private def check_for_method_override! @override_method = @method if @method == "POST" - params = Kemal::ParamParser.new(self).body + @param_parser = Kemal::ParamParser.new(self) + params = @param_parser.not_nil!.body if params.has_key?("_method") && HTTP::Request.override_method_valid?(params["_method"]) @override_method = params["_method"] end