Я использую переставленный c ++, и я столкнулся с проблемой при регистрации того же URI, но с разными методами (POST, GET, DELETE) на одном ресурсе.
При запуске сервера и запросе GET запрос работает нормально, но для запроса POST я получаю '405 Method Not Allowed'
PS, обратите внимание, я должен был обмануть часть регулярного выражения, даже чтобы иметь возможность сопротивляться методу.
- GET: язык: [a-z _]
- POST: язык: [ab-z _]
This if I register it with the same expression **set_path("/hello/{language:[a-z_]+}");**
#./so-rest
Service accepting HTTP connections at 'http://[::]:1984'.
Resource published on route '/hello/{language:[a-z_]+}'.
So I kinda use these paths to be able to register them bought.
#./so-rest
Service accepting HTTP connections at 'http://[::]:1984'.
Resource published on route '/hello/{language:[a-z_]+}'.
Resource published on route '/hello/{language:[ab-z_]+}'.
Есть идеи, что происходит не так? Спасибо.
Это пример кода.
#include <memory>
#include <cstdlib>
#include <restbed>
using namespace std;
using namespace restbed;
class CustomLogger : public Logger
{
public:
void stop( void )
{
return;
}
void start( const shared_ptr< const Settings >& )
{
return;
}
void log( const Level, const char* format, ... )
{
va_list arguments;
va_start( arguments, format );
vfprintf( stderr, format, arguments );
fprintf( stderr, "\n" );
va_end( arguments );
}
void log_if( bool expression, const Level level, const char* format, ... )
{
if ( expression )
{
va_list arguments;
va_start( arguments, format );
log( level, format, arguments );
va_end( arguments );
}
}
};
int main( const int argc , const char** argv)
{
Service service;
auto print_get = []( const shared_ptr< Session > session ){
std::string body = "Hello GET";
session->close( OK, body, { { "Content-Length", ::to_string( body.length( ) ) } } );
};
auto print_post = []( const shared_ptr< Session > session ){
std::string body = "Hello POST";
session->close( OK, body, { { "Content-Length", ::to_string( body.length( ) ) } } );
};
{
auto resource = make_shared< Resource >( );
resource->set_path("/hello/{language:[a-z_]+}");
resource->set_method_handler( "GET" , print_get);
service.publish(resource);
}
{
auto resource = make_shared< Resource >( );
resource->set_path("/hello/{language:[ab-z_]+}");
resource->set_method_handler( "POST" , print_post);
service.publish(resource);
}
auto settings = make_shared< Settings >( );
settings->set_port( 1984 );
service.set_logger( make_shared< CustomLogger >( ) );
settings->set_default_header( "Connection", "close" );
service.start( settings );
return EXIT_SUCCESS;
}