【发布时间】:2016-04-05 13:31:35
【问题描述】:
我的带有 Perl Dancer 的 RESTfull 服务器运行完美,但有一个例外:send_error("Simple Error string",400) 例如删除了错误消息。
将发送错误代码,但没有实际消息“简单错误字符串”。
我也试过return send_entity({ error => "Missing parameter "}, 400)也无济于事。
代码如下:
#!/usr/bin/perl
##########################################################################################################################################
# V1.0 REST-Server
##########################################################################################################################################
use Dancer;
use Dancer::Plugin::Auth::Basic;
use Dancer::Plugin::Database;
use Dancer::Plugin::REST;
set serializer => 'XML';
post '/hello/:name' => sub
{
# Low level test route
auth_basic realm => 'Authorized personnel only', users => { 'alice' => 'AlicesPassword', 'bob' => 'BobsPassword' };
send_error("Simple Error string",400);
};
dance;
使用 curl 进行测试:
#curl -X POST -k -u alice:AlicesPassword http://localhost:5000/hello/abc
An internal error occured
在 Firefox 下使用 RESTer(通过 https 代理)。
RESTer 报告相同。
几次谷歌搜索没有提示,如何生成正确的错误代码和提供的消息。
希望有人能给我一个提示。
【问题讨论】:
-
你为什么使用 Rest::Client 和 XML::Simple 和 MIME::Base64?那些是把你的代码修剪成minimal reproducible example的剩余部分吗?这是哪个版本的舞者?
-
对不起,你是对的,这确实是大代码的剩余部分!
-
对!我删除了 --data 扩展名。没有必要显示错误。感谢您提供可验证示例的提示,这是我的第一篇文章!
-
我也无法让它工作,而且我看不到该错误消息来自哪里。我添加了一个有效的
get,如果你只是来自post子的return "foo",它也有效,即使除了use Dancer;之外没有任何东西。但是一旦send_error出现,它就会中断。这很奇怪。但请注意send_error("foo", 500)将产生一个状态为500 foo的HTTP 响应。foo并没有像你期望的那样进入身体。 -
send_error 中断路由。这是有记录的。是的,一个'return "foo"'可以工作,但是http状态码是200。我正在寻找一种方法来发送带有4XX或5XX的代码以及一条消息。我正在试验
return send_entity({ error => $message}, 500)。这似乎效果更好。如果我知道更多,我会在这里发帖。