【问题标题】:How to put a specific message in the "response body" of a perl Dancer server如何将特定消息放入 perl Dancer 服务器的“响应正文”中
【发布时间】: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)。这似乎效果更好。如果我知道更多,我会在这里发帖。

标签: perl response dancer


【解决方案1】:

要简单地更改 Http 状态,您可以使用 status keyword 并将您的内容作为响应正文返回。

get '/' => sub {
  status 418;
  return 'I cannot make coffee.';
};

【讨论】:

  • 抱歉,您的示例仅在网络服务器在茶壶上运行时才有意义;P
  • @ThisSuitIsBlackNot:感谢您修复标记。那是我的电话。很明显这是一个茶壶,不是吗? :)
  • 你帮了我很大的忙,有时候解决办法很明显!
  • @cablebuddy 这实际上是一个非常好的第一个问题。欢迎来到堆栈溢出 :)
  • @cablebuddy 这可能会非常耗时。如果您有$work 要做,请不要阅读热门网络问题。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
相关资源
最近更新 更多