hmm, what is wrong with this stripped example?

 

######## form.xqm:

 

module namespace page = 'http://basex.org/examples/web-page';

 

declare

  %rest:path("/esv/fun/form")

  %rest:single

 

function page:form() {

 

  let $body :=

  <div>

    <form action="/esv/test-form" id="myform2" method="post">

      <input type="text" name="foo"></input>

      <input type="hidden" name="key" value="key"/>

      <input type="submit" value="submit"></input>

    </form>

 </div>

  return (web:response-header(map {'method':'xhtml'}),

          $body)

};

 

######## test-form.xqm:

 

module namespace esv = 'esv/queries';

 

declare

  %rest:POST("{$body}")

  %rest:form-param("key", "{$key}")

  %rest:path("/esv/test-form")

  %rest:consumes("application/x-www-form-urlencoded")

  %rest:single

  %output:method("text")

function esv:test-form(

  $body as xs:string,

  $key as xs:string

)  {

  "parameter-names(): " || request:parameter-names(),

  "$body: " || $body,

  "$key: " || $key

};

 

######## output:

parameter-names():  $body: foo=bar&key=key $key: key

 

 

Von: Marco Lettere <m.lettere@gmail.com>
Gesendet: Donnerstag, 23. April 2020 10:40
An: Zimmel, Daniel <D.Zimmel@ESVmedien.de>; basex-talk@mailman.uni-konstanz.de
Betreff: Re: AW: AW: [basex-talk] A question about RESTXQ rest:form-param()

 

I set up this restxq [1].

And call it with something like [2].

Got an output of [3] which looks like what I expect.

M.

 

[1]

module namespace t = "urn:test";

declare
  %rest:path("test")
  %rest:POST
  %rest:consumes("application/x-www-form-urlencoded")
  %output:method("html")
function t:test() {
 <html>
   <body>
     <p>{request:parameter-names() ! (. || "=" || request:parameter(.))}</p>
   </body>
 </html>
};

 

[2]

curl --location --request POST 'http://localhost:8984/test' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'param1=Hello' \
--data-urlencode 'param2=World'

 

[3]

<html>

  <body>

    <p>param1=Hello param2=World</p>

  </body>

</html>

 

On 22/04/20 16:03, Zimmel, Daniel wrote:

the mime type seems correct, all params are being sent. I do not have problems getting the body, only request:parameter-names() does not give any values. (request:header works, for example)
 
-----Ursprüngliche Nachricht-----
Von: Marco Lettere <m.lettere@gmail.com> 
Gesendet: Mittwoch, 22. April 2020 15:31
An: Zimmel, Daniel <D.Zimmel@ESVmedien.de>; basex-talk@mailman.uni-konstanz.de
Betreff: Re: AW: [basex-talk] A question about RESTXQ rest:form-param()
 
Are you setting the mime type to "application/x-www-form-urlencoded"?
This is the prerequisite in order to get the body of a post parsed to form parameters.
M.
 
On 22/04/20 15:22, Zimmel, Daniel wrote:
Thanks for the hint Marco,
 
I just tried request:parameter-names(): that one works with GET but with POST I get an empty-sequence, I am not sure what the problem is here.
I can access the full (unparsed) body, though (I can use that).
 
Daniel
 
-----Ursprüngliche Nachricht-----
Von: Marco Lettere <m.lettere@gmail.com>
Gesendet: Mittwoch, 22. April 2020 14:24
An: basex-talk@mailman.uni-konstanz.de
Betreff: Re: [basex-talk] A question about RESTXQ rest:form-param()
 
Hi Daniel,
another way is to use request:* functions [1] available for programmatic inspection of the request.
Cheers,
M.
 
[1] https://docs.basex.org/wiki/Request_Module
 
 
On 22/04/20 12:18, Zimmel, Daniel wrote:
Hi Daniel,
 
RTFM. Simply pass the body in %rest:POST("{$body}").
 
Sorry for disturbing!
 
Daniel
 
-----Ursprüngliche Nachricht-----
Von: Zimmel, Daniel <D.Zimmel@ESVmedien.de>
Gesendet: Mittwoch, 22. April 2020 11:27
An: BaseX <basex-talk@mailman.uni-konstanz.de>
Betreff: [basex-talk] A question about RESTXQ rest:form-param()
 
Hi,
 
in an HTML form with a RESTXQ POST action, do I really have to declare %rest:form-param() for every param, or is there a way to pass the full query component in one parameter?
 
Best, Daniel