diff --git a/examples/SimpleServer/SimpleServer.ino b/examples/SimpleServer/SimpleServer.ino index 8a2ccfe3..9464c1c1 100644 --- a/examples/SimpleServer/SimpleServer.ino +++ b/examples/SimpleServer/SimpleServer.ino @@ -183,10 +183,6 @@ const char* SSE_HTLM PROGMEM = R"( )"; -void notFound(AsyncWebServerRequest* request) { - request->send(404, "text/plain", "Not found"); -} - #if __has_include("ArduinoJson.h") AsyncCallbackJsonWebHandler* jsonHandler = new AsyncCallbackJsonWebHandler("/json2"); AsyncCallbackMessagePackWebHandler* msgPackHandler = new AsyncCallbackMessagePackWebHandler("/msgpack2"); @@ -759,7 +755,23 @@ websocat: error running server.addHandler(msgPackHandler); #endif - server.onNotFound(notFound); + // catch any request, and send a 404 Not Found response + // except for /game_log which is handled by onRequestBody + server.onNotFound([](AsyncWebServerRequest* request) { + if (request->url() == "/game_log") + return; // response object already creted by onRequestBody + + request->send(404, "text/plain", "Not found"); + }); + + // https://github.com/ESP32Async/ESPAsyncWebServer/issues/6 + // curl -v -X POST http://192.168.4.1/game_log -H "Content-Type: application/json" -d '{"game": "test"}' + // catch any POST request and send a 200 OK response + server.onRequestBody([](AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) { + if (request->url() == "/game_log") { + request->send(200, "application/json", "{\"status\":\"OK\"}"); + } + }); server.begin(); } diff --git a/src/WebHandlers.cpp b/src/WebHandlers.cpp index 44a46014..c3efab70 100644 --- a/src/WebHandlers.cpp +++ b/src/WebHandlers.cpp @@ -308,6 +308,7 @@ void AsyncCallbackWebHandler::handleUpload(AsyncWebServerRequest* request, const _onUpload(request, filename, index, data, len, final); } void AsyncCallbackWebHandler::handleBody(AsyncWebServerRequest* request, uint8_t* data, size_t len, size_t index, size_t total) { + // ESP_LOGD("AsyncWebServer", "AsyncCallbackWebHandler::handleBody"); if (_onBody) _onBody(request, data, len, index, total); } \ No newline at end of file diff --git a/src/WebRequest.cpp b/src/WebRequest.cpp index e96ec5f2..5fd39bb4 100644 --- a/src/WebRequest.cpp +++ b/src/WebRequest.cpp @@ -141,6 +141,7 @@ void AsyncWebServerRequest::_onData(void* buf, size_t len) { } } if (!_isPlainPost) { + // ESP_LOGD("AsyncWebServer", "_isPlainPost: %d, _handler: %p", _isPlainPost, _handler); if (_handler) _handler->handleBody(this, (uint8_t*)buf, len, _parsedLength, _contentLength); _parsedLength += len; diff --git a/src/WebServer.cpp b/src/WebServer.cpp index ebf126a2..2442c8a6 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -153,7 +153,7 @@ void AsyncWebServer::_attachHandler(AsyncWebServerRequest* request) { return; } } - + // ESP_LOGD("AsyncWebServer", "No handler found for %s, using _catchAllHandler pointer: %p", request->url().c_str(), _catchAllHandler); request->setHandler(_catchAllHandler); }