mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-23 11:54:42 +00:00
Answer 500 to an exception the exception handler gives no status
An exception handler that set no status sent its response with 200, or with whatever status the throwing handler had set. The status is now set to 500 before the exception handler runs, as ASP.NET Core does, so it stays 500 unless the exception handler sets another one. On a WebSocket upgrade, an exception from the pre-routing handler, the pre-request handler or the sub-protocol selector skipped the exception handler and dropped the connection without a response. Everything before the protocol switches now goes through the same exception handling as routing, so it is answered over HTTP. The WebSocket handler itself still runs outside it.
This commit is contained in:
1 parent
64b5c68a46
commit
b8ae3e43d5
3 files changed
+215
-88
No files matched your search
@@ -522,7 +522,7 @@ svr.set_error_handler([](const auto& req, auto& res) {
|
||||
```
|
||||
|
||||
### Exception handler
|
||||
The exception handler gets called if a user routing handler throws an error. This covers the pre-routing handler, the file request handler, the pre-request handler, route handlers and content readers. An exception from the post-routing handler, the error handler, the `Expect: 100-continue` handler, a content provider, a logger or a WebSocket handler does not reach it: the connection is dropped, and the error logger receives `Error::UserCallbackException`.
|
||||
The exception handler gets called if a user routing handler throws an error. This covers the pre-routing handler, the file request handler, the pre-request handler, route handlers, content readers and, on a WebSocket upgrade, the sub-protocol selector. The response is a 500 unless the exception handler sets another status. An exception from the post-routing handler, the error handler, the `Expect: 100-continue` handler, a content provider, a logger or a WebSocket handler does not reach it: the connection is dropped, and the error logger receives `Error::UserCallbackException`.
|
||||
|
||||
```cpp
|
||||
svr.set_exception_handler([](const auto& req, auto& res, std::exception_ptr ep) {
|
||||
|
||||
Reference in new issue
Block a user