Setting the HTTP status in Dancer's before hook with the status keyword doesn't work with the exception of 301 and 302 (redirects).
To solve this problem, you can define first a special route for setting the HTTP status:
get '/bad_request' => sub {
status 400;
return 'Bad request.';
}
And advise Dancer to run this route from the before hook
on a certain condition:
hook before => sub {
if (! param('customer_id')) {
request->path_info('/bad_request');
}
}