AlexanderP Posted October 24 Posted October 24 Добрый день! При разработке своего API заметил такую особенность 1. делаю простой проект, в ServerModule указываю такой код void __fastcall TUniServerModule::UniGUIServerModuleHTTPCommand(TIdHTTPRequestInfo *ARequestInfo, TIdHTTPResponseInfo *AResponseInfo, bool &Handled) { if(ARequestInfo->Document == "/ss") { AResponseInfo->ResponseNo = 404; AResponseInfo->ContentType = "application/json"; AResponseInfo->ContentText = "{\"option\": \"error-1\", \"NodeId\": \"" + String(NodeId) + "\"}"; Handled = true; } } 2. запускаю hyper_service и пытаюсь вызвать http://localhost:8077/ss в ответ получаю вот такое сообщение, а ожидал в ответе получить такую строку {"option": "error-1", "NodeId": "1"} если же я меняю ResponseNo на 200 AResponseInfo->ResponseNo = 200; далее запускаю hyper_service и вызваю http://localhost:8077/ss, то все нормально Если не использовать hyper_service, просто запустить exe, то все нормально, т.е. такая аномалия возникает именно при использовании hyper_service Так же вместо браузера вызов повторил в postman, результат такой же Что мне нужно сделать чтобы при указании ResponseNo = 404 тоже возвращался json ? использую версию uni-1.95.0.1603 Quote
AlexanderP Posted October 27 Author Posted October 27 Добрый день! Sherzod, можете глянуть ? установил версию uni-1.95.0.1607, результат тот же Quote
Sherzod Posted October 27 Posted October 27 Добрый вечер! Если вы хотите вернуть JSON-ошибку, но не хотите, чтобы HyperServer вмешивался — используйте код 200, но добавляйте флаг ошибки в JSON, например: AResponseInfo->ResponseNo = 200; AResponseInfo->ContentType = "application/json"; AResponseInfo->ContentText = "{\"success\": false, \"error\": \"not_found\"}"; Handled = true; Quote
AlexanderP Posted October 27 Author Posted October 27 3 hours ago, Sherzod said: Добрый вечер! Если вы хотите вернуть JSON-ошибку, но не хотите, чтобы HyperServer вмешивался — используйте код 200, но добавляйте флаг ошибки в JSON, например: AResponseInfo->ResponseNo = 200; AResponseInfo->ContentType = "application/json"; AResponseInfo->ContentText = "{\"success\": false, \"error\": \"not_found\"}"; Handled = true; А с HyperServer так и было задумано, что он вмешивается ? Quote
AlexanderP Posted October 29 Author Posted October 29 Добрый день! Sherzod, не хочу показаться назойливым, но если все таки потребуется, чтобы при ResponseNo = 4?? или 5?? нужно возвращать json планируется ли какая то настройка в HyperServer в будущем, чтобы было опционально или мне проще разработать отдельный сервис, который будет работать только на прием API запросов ? Может на просторах форума были подобные вопросы и какое то решение от разработчиков ? я пока сам не могу найти правильное решение на просторах форума Quote
AlexanderP Posted November 6 Author Posted November 6 Sherzod, если все таки нужно, чтобы при ResponseNo = 4?? или 5?? возвращался json Планируется ли какая то настройка в HyperServer в будущем, чтобы было опционально ? Может на просторах форума были подобные вопросы и какое то решение от разработчиков ? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.