Handler Chain (based on request method)
Handler Chain (based on request method)
am 28.10.2009 17:58:21 von Aaron Dalton
I'm using mod_perl and CGI::Application::Dispatch to create a RESTful
web application. In the one resource, GETs should be sent to the
default handler, and all other requests to the dispatcher. I have tried
using and , but they do not appear to be working.
The handlers get processed regardless. Here is the current config:
Allow from All
SetHandler perl-script
PerlHandler BackCAD::Dispatch
Allow from All
SetHandler default-handler
Is there some way to make this work? Do I need to write some sort of
pre-dispatcher that checks the request method and returns DECLINED if
it's GET? But if it's *not* GET, how do I then pass control on to the
other dispatcher?
Thank you so much for your time and assistance.
Aaron
Re: Handler Chain (based on request method)
am 28.10.2009 18:12:58 von aw
Aaron Dalton wrote:
> I'm using mod_perl and CGI::Application::Dispatch to create a RESTful
> web application. In the one resource, GETs should be sent to the
> default handler, and all other requests to the dispatcher. I have tried
> using and , but they do not appear to be working.
> The handlers get processed regardless. Here is the current config:
>
>
>
> Allow from All
> SetHandler perl-script
> PerlHandler BackCAD::Dispatch
>
>
> Allow from All
> SetHandler default-handler
>
>
>
> Is there some way to make this work? Do I need to write some sort of
> pre-dispatcher that checks the request method and returns DECLINED if
> it's GET? But if it's *not* GET, how do I then pass control on to the
> other dispatcher?
>
Just by curiosity, what happened to the suggestions I gave you on the
Apache httpd list (apart from the first one, which was to cross-post here) ?
Also, the reason why the above does not work is probably that the
sections are not really full containers. So your SetHandlers
above probably overwrite one another regardless, and only the last one
counts.
Another quick/cheap hack maybe :
>
> Allow from All
> SetHandler perl-script
> PerlHandler BackCAD::Dispatch
>
then modify the code of BackCAD::Dispatch to return DECLINED if it's a GET.
Honestly, I've never tried that, and I don't know if then Apache would
process it with its default handler. But it's worth a try maybe.
Re: Handler Chain (based on request method)
am 28.10.2009 18:16:34 von aw
André Warnier wrote:
>>
> Just by curiosity, what happened to the suggestions I gave you on the
> Apache httpd list (apart from the first one, which was to cross-post
> here) ?
>
Ok, sorry, I see that response to the httpd list just got there.
Maybe better to move the whole discussion here, there is probably more
focused help available.
Re: Handler Chain (based on request method)
am 28.10.2009 19:07:01 von Perrin Harkins
On Wed, Oct 28, 2009 at 12:58 PM, Aaron Dalton wrote:
> I'm using mod_perl and CGI::Application::Dispatch to create a RESTful
> web application. =A0In the one resource, GETs should be sent to the
> default handler, and all other requests to the dispatcher. =A0I have trie=
d
> using and , but they do not appear to be working.
Those are for rejecting requests, not mapping them to handlers. I
would either use mod_rewrite to map the GET requests to a different
location, or make a PerlTransHandler to deal with it.
> Do I need to write some sort of
> pre-dispatcher that checks the request method and returns DECLINED if
> it's GET?
Right, that would be the TransHandler approach.
> But if it's *not* GET, how do I then pass control on to the
> other dispatcher?
You can set the handler for the current request from within the
script. Take a look at the docs for examples. I know you'll find
some if you search for "default-handler" in the mail archives too.
- Perrin