Skip to content

Body Parsing

Pode has inbuilt body/payload parsing on Requests, which by default can parse the following content types:

  • */json
  • */xml
  • */csv
  • */x-www-form-urlencoded
  • multipart/form-data

This is useful however, there can be times when you might want to use a different JSON parsing library - or parse a completely different content type altogether! This is possible using the Add-PodeBodyParser function.

Adding a Parser

You can use the Add-PodeBodyParser function to define a scriptblock that can parse the Request body for a specific content type. Any set parsers have a higher priority than the inbuilt ones, meaning if you define a parser for application/json then this will be used instead of the inbuilt one.

The scriptblock you supply will be supplied a single argument, which will be the Body of the Request.

For example, to set your own JSON parser that will simply return the body unmodified you could do the following:

Add-PodeBodyParser -ContentType 'application/json' -ScriptBlock {
    param($body)
    return $body
}

This can then be accessed the normal way within a Route from the .Data property on the accessible $WebEvent:

Add-PodeRoute -Method Post -Path '/' -ScriptBlock {
    # if using the above parser, .Data here will just be a plain string
    Write-PodeTextResponse -Value $WebEvent.Data
}

This is great if you want to be able to parse other content types like YAML, HCL, or many others!

Removing a Parser

To remove a defined parser you can use the Remove-PodeBodyParser function:

Remove-PodeBodyParser -ContentType 'application/json'

Note

This will only remove defined custom parsers, and will not affect the inbuilt parsers.