Получение HTTP 501 не реализовано, когда есть определенная реализация? - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь сделать простой сервис http, у меня пока работают GET и POST. По какой-то причине, хотя каждый раз, когда я пытаюсь отправить PUT, мой перезагруженный сервер возвращает 501, хотя у меня установлен обработчик метода для PUT.

Методы PUT, POST и GET устанавливаются точно так же, через resource->set_method_handler("METHOD", METHOD_method_handler);

Обработчик / настройка

void put_method_handler(const std::shared_ptr<restbed::Session>& session) {
  const auto request = session->get_request();

  std::cout << "yes\n";
}

int main() {
  auto resource = std::make_shared<restbed::Resource>();
  resource->set_path("/resource");
  resource->set_method_handler("PUT", put_method_handler);

  // bla bla service.publish() etc
}

В настоящее время используется простой JavaScript FETCH через консоль Chrome, чтобы просто увидеть, получает ли он что-нибудь.

fetch("http://localhost:1234/resource", {method: 'PUT', body: {}})

Мой сервер должен печатать оператор cout, но вместо этого он молчит и fetch возвращает 501.

1 Ответ

0 голосов
/ 07 ноября 2019

Я только что проверил , как тестируют разработчики с перезаписью put метод .. Ниже приведен фрагмент кода:

void put_handler( const shared_ptr< Session > session )
{
    session->close( 200, "Hello, World!", { { "Content-Length", "13" }, { "Connection", "close" } } );
}

SCENARIO( "publishing single path resources", "[resource]" )
{
    auto resource = make_shared< Resource >( );
    resource->set_path( "/resources/1" );
    resource->set_method_handler( "PUT", put_handler );
    ...
}

Я предполагаю, что вы не возвращаете код успеха вВаш обработчик положен так, что сервер думает, что возвращенный не явный код означает, что метод не реализован.

...