1

默认情况下,当请求未知资源(根据我的理解,本质上是 404 错误)时, Catalyst::Dispatch会发出错误:

将调度委托给与 url 匹配的操作,或返回有关未知资源的消息

我的应用程序的日志文件显示:

Mar 30 10:19:08 mail myapp: Unknown resource "user/soapCaller.bs"
Mar 30 16:20:38 mail myapp: Unknown resource "HTTP/1.1"
Mar 30 16:20:38 mail myapp: Unknown resource "index.php"

可以说,这对我来说似乎是一个错误。一个简单的 404 不应该被视为与“无法连接到数据库”错误相提并论,但这不是重点。我的问题是:

我怎样才能改变这种行为?

我在 Root.pm 中创建一个简单的default()操作的成功有限:

sub default : Private {
    my ( $self, $c ) = @_;
}

这成功地消除了日志文件的错误,但是,我没有成功编写自己的日志消息/优先级。以下尝试输出我自己的警告均未成功。

sub default : Private {
    my ( $self, $c ) = @_;
    warn "Foo\n";
    $c->log->debug('Bar');
    $c->log->warn('Baz');
}

那么,在 Catalyst 应用程序中为“未知资源”定义自己的行为的最佳方法是什么?

4

1 回答 1

0

问题是我有一个 auto() 操作,它在 default() 之前运行,并重定向到另一个页面。

sub auto : Private {
    my ( $self, $c ) = @_;
    ...
    if ( ! $c->user_exists ) {
        $c->redirect( $c->uri_for('/login') );
    }
}

我能够通过添加来解决这个问题:

    return 1 if $c->action eq 'default';

在重定向之前。

于 2013-09-06T20:59:38.930 回答