[prev in list] [next in list] [prev in thread] [next in thread]
List: mason
Subject: Re: [Mason] CGIHandler and 404 errors
From: Max Baker <max () warped ! org>
Date: 2008-03-07 17:08:24
Message-ID: 20080307170824.GB10522 () warped ! org
[Download RAW message or body]
This should be added to the documentation... I worked around this by
looking for the file and returning 404, but it was not nearly as elegant.
-m
On Wed, Mar 05, 2008 at 10:33:06AM -0800, Ian Burrell wrote:
> On Thu, Feb 28, 2008 at 7:36 PM, Hans Dieter Pearcey <hdp@pobox.com> wrote:
> >
> > On Thu, Feb 28, 2008 at 05:47:20PM -0800, Ian Burrell wrote:
> > > We use a subclass of HTML::Mason::CGIHandler. How do we get 404
> > > errors instead of fatal errors when the component is not found? It
> > > looks like HTML::Mason::ApacheHandler has special code to detect
> > > TopLevelNotFound errors and turn them into 404's (or at least comments
> > > about what to override). What do we need to override in CGIHandler to
> > > return 404's?
> >
> > I think what ApacheHandler really relies on is trying to resolve the path to a
> > component before doing any execution. The TopLevelNotFound errors are caught,
> > but my guess (only a guess) is that that's just a backup, for some weird edge
> > case.
> >
> > Doing the same thing with CGIHandler seems pretty reasonable to me. There's
> > nothing to override, though, because CGIHandler does less than Apache.
> >
>
> For anyone that is curious, it was easy to extend our CGIHandler and
> Request sub-class to give 404 HTTP errors instead of going through
> normal mason error handling.
>
> The Request sub-class overrides _handle_error to rethrow
> TopLevelNotFound errors.
>
> sub _handle_error
> {
> my ($self, $err) = @_;
> rethrow_exception($err) if $self->is_subrequest;
>
> if (isa_mason_exception($err, 'TopLevelNotFound')) {
> rethrow_exception($err);
> }
> $self->SUPER::_handle_error($err);
> }
>
> The CGIHandler sub-class overrides handle_cgi_object to turn
> TopLevelNotFound into 404 status.
>
> sub handle_cgi_object
> {
> my ($self, $cgi) = @_;
> eval {
> $self->SUPER::handle_cgi_object($cgi);
> };
> if (my $err = $@) {
> if (isa_mason_exception($err, 'TopLevelNotFound')) {
> return NOT_FOUND;
> }
> else {
> rethrow_exception($err);
> }
> }
> }
>
> Our CGI script returns the 404 status back to the browser.
>
> - Ian
>
>
>
>
> - Ian
>
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic