В настоящее время я пытаюсь реализовать интерфейс REST с casablanca, но я получаю «Ошибка при добавлении URL в группу URL». И я не знаю, как это исправить. Вот мой основной метод:
int main(int argc, char* argv[])
{
InterruptHandler::hookSIGINT();
Server server;
server.setEndpoint(L"http", 41004, L"/api/v1");
try {
// wait for server initialization...
server.accept().wait();
std::wcout << L"Modern C++ Server now listening for requests at: " << server.endpoint() << '\n';
InterruptHandler::waitForUserInterrupt();
server.shutdown().wait();
}
catch (std::exception & e) {
std::cerr << e.what() << '\n'; //this is returning "Error adding url to url group"}
system("pause");
}
Сейчас я пытаюсь выяснить, где может быть проблема, но я не ушел далеко. Я устанавливаю конечную точку и создаю http_listener следующим образом (класс сервера расширяет BaseController):
void BaseController::setEndpoint(const std::wstring &scheme, const int port, const std::wstring &path) {
uri_builder endpointBuilder;
endpointBuilder.set_scheme(scheme);
endpointBuilder.set_host(L"0.0.0.0");
endpointBuilder.set_port(port); //41004
endpointBuilder.set_path(path);
_listener = http_listener(endpointBuilder.to_uri());
}
Когда сервер принимает, поддерживающие методы устанавливаются на слушателе
void Server::initRestOpHandlers() {
_listener.support(methods::GET, std::bind(&Server::handleGet, this, std::placeholders::_1));
_listener.support(methods::POST, std::bind(&Server::handlePost, this, std::placeholders::_1));
}
Исключение выдается в методе open () http_listener.cpp:
pplx::task<void> details::http_listener_impl::open()
{
// Do nothing if the open operation was already attempted
// Not thread safe
if (!m_closed) return pplx::task_from_result();
if ( m_uri.is_empty() )
throw std::invalid_argument("No URI defined for listener.");
m_closed = false;
return web::http::experimental::details::http_server_api::register_listener(this).then([this](pplx::task<void> openOp)
{
try
{
// If failed to open need to mark as closed.
openOp.wait();
}
catch(...)
{
m_closed = true;
throw;
}
return openOp;
});
}
Я не могу найти никакой помощи в другом месте, и я не могу понять, почему она не открывается. Любая помощь будет оценена! Благодарю.
хорошо, я смог решить это сам … Мне пришлось использовать 127.0.0.1 для хоста в моем BaseController
Других решений пока нет …