Ошибка отправки POST запроса между сервисами и ошибка десериализации ответа
Есть сервис расположенный по адресу https://ххх.рф (основной), у него есть API с маршрутом до него - https://ххх.рф/api/TelegramBot/AcceptReplyMessageBot:
[HttpPost("AcceptReplyMessageBot")]
public async Task<IActionResult> AcceptReplyMessageBot([FromBody] MessageData messageData)
{
Friend friend;
ResponseMessageData responseMessage;
string jsonResponse;
string numberPhone = messageData.PhoneNumber != null ? ServicePhoneNumber.LeaveOnlyNumbers(messageData.PhoneNumber) : null;
if (numberPhone != null && numberPhone.Length > 10)
{
friend = _serviceFriends.FindUserByPhoneNumber(numberPhone);
}
else
{
responseMessage = new ResponseMessageData { Status = "Invalid phone number" };
return Ok(responseMessage);
}
string textQrCode;
Byte[] byteCode = null;
if (friend != null) {
textQrCode = friend.TextQRcode;
}
else
{
responseMessage = new ResponseMessageData { Status = "Not found" };
return Ok(responseMessage);
}
if(friend.ByteQrcode != null)
{
byteCode = friend.ByteQrcode;
}
if(textQrCode != null && byteCode != null)
{
responseMessage = new ResponseMessageData { PhoneNumber = friend.Telephone, TextMessage = textQrCode, ByteQrcode = byteCode };
}
else if (textQrCode != null)
{
responseMessage = new ResponseMessageData { PhoneNumber = friend.Telephone, TextMessage = textQrCode};
}
else
{
responseMessage = new ResponseMessageData { TextMessage = "Участнику с данным номером телефона не присвоен QR-код!" };
}
//jsonResponse = JsonSerializer.Serialize(responseMessage);
return Ok(responseMessage);
}
Есть другой микро сервис по адресу https://messanger.ххх.рф (TLmessenger), который отправляет на вышеописанный основной сервис POST запросы и обрабатывает от него ответы:
[HttpPost]
public async Task<IActionResult> Post([FromBody] Update update)
{
if (update == null) return Ok();
string responseMessage = "";
if (message != null)
{
responseMessage = "Укажите номер в федеральном формате (+7хххххххххх)";
if (message.ReplyToMessage != null)
{
string messageNumberPhone;
switch (message.ReplyToMessage.Text)
{
case "Укажите номер в федеральном формате (+7хххххххххх)":
messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);
if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
{
await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
}
else
{
MessageData requestMessage = _messageDataService.CreateMessageData(update, this.HttpContext.Request.Host.Value.ToString());
// Отправка запроса на API др. сервиса
string jsonRequest = JsonSerializer.Serialize(requestMessage);
string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);
if (!responseData.Status.Equals("NotFound") && responseData.TextMessage != null)
{
string responseMessageFromDB = responseData.TextMessage;
await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
}
else {
string responseMessageFromDB = "Участник с данным номером телефона не найден!";
await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
}
}
break;
case "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)":
messageNumberPhone = ServicePhoneNumber.LeaveOnlyNumbers(message.Text);
if (messageNumberPhone.Length < 11 || messageNumberPhone.Length > 12)
{
await _telegramBotClient.SendTextMessageAsync(message.From.Id, "Номер указан в неверном формате. Ждем Ваш номер в федеральном формате (+7хххххххххх)", ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
}
else
{
MessageData requestMessage = _messageDataService.CreateMessageData(update, this.HttpContext.Request.Host.Value.ToString());
// Отправка запроса на API др. сервиса
string jsonRequest = JsonSerializer.Serialize(requestMessage);
string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);
if (!responseData.Status.Equals("NotFound") && responseData.TextMessage != null)
{
string responseMessageFromDB = responseData.TextMessage;
await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
}
else
{
string responseMessageFromDB = "Участник с данным номером телефона не найден!";
await _telegramBotClient.SendTextMessageAsync(message.Chat.Id, responseMessageFromDB);
}
}
break;
}
}
else
{
await _telegramBotClient.SendTextMessageAsync(message.From.Id, responseMessage, ParseMode.Default, replyMarkup: new ForceReplyMarkup { Selective = true });
}
}
return Ok();
}
// Функция отправки запроса на API др. сервиса
[ApiExplorerSettings(IgnoreApi = true)]
public async Task<string> PostRequestHttpAsync(string url, string json)
{
using HttpContent content = new StringContent(json, Encoding.UTF8, "application/json");
HttpClient httpClient = _clientFactory.CreateClient();
httpClient.Timeout = TimeSpan.FromSeconds(120);
using HttpResponseMessage response = await httpClient.PostAsync(url, content).ConfigureAwait(false);
return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
}
Пробовал отправлять на каждый из этих контроллеров обоих сервисов POST запросы через Postman - все отрабатывает норм. Проверил работает ли 2-ой сервис (бот TLmessenger) отдельно без отправки запросов на основной - работает. Добавил отправку запросов из бота TLmessenger на основной сервис - TLmessenger перестал работать.
Далее запустил первый (основной) сервис у себя на локально через ngrok, а 2-му (боту TLmessenger) прописал адрес url на который нужно слать запросы на 1-ый, который сформировал ngrok. Залил 2-ой (бота TLmessenger) на хостинг, в итоге TLmessenger сообщения из телеграмма получает, обрабатывает, отправляет POST запрос на основной сервис, основной сервис получает этот запрос отрабатывает и отправляет ответ, но TLmessenger не отвечает, по ходу не может обработать ответ.
Попробовал запустил первый (основной) сервис у себя на локально через ngrok. 2-ой (бота TLmessenger) запустил в режиме отладки на другом ПК и отправил запрос через swagger, в итоге TLmessenger сообщение из swagger получает, обрабатывает, отправляет POST запрос на основной сервис (запущенный на ngrok), основной сервис получает этот запрос отрабатывает и отправляет ответ, TLmessenger ответ получает, но когда пытается вернуть его
string jsonResponseData = await PostRequestHttpAsync(url, jsonRequest);
ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);
string str = responseData.Status;
return Ok(str);
получаю ошибку:
204 Undocumented Response headers date: Thu30 Sep 2021 04:58:28 GMT server: Microsoft-IIS/10.0 x-powered-by: ASP.NET
Не пойму в чем проблема.
Скрины ответа полученного от основного сервиса из отладчика:

Запустил оба сервиса на одном хосте, но на разных портах с помощью Kestral. При тестировании выдало следующею ошибку:
Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] Failed to determine the https port for redirect. System.Text.Json.JsonException: 'T' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0. ---> System.Text.Json.JsonReaderException: 'T' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0. at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8Js onReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan
1 bytes) at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker) at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first) at System.Text.Json.Utf8JsonReader.ReadSingleSegment() at System.Text.Json.Utf8JsonReader.Read() at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8 JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- End of inner exception stack trace --- at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex) at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8 JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.JsonSerializer.ReadCore[TValue](JsonConverter jsonConverter, Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.JsonSerializer.ReadCore[TValue](Utf8JsonReader& reader, Type returnType, JsonSerializerOptions options) at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, Type returnType, JsonSerializerOptions options) at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options) at TLmessanger.Controllers.TelegramListenerController.Post(Upda te update) in D:\My_PROGRAMS\TLmessanger\Controllers\TelegramListenerContr oller.cs:line 179
в строке:
ResponseMessageData responseData = JsonSerializer.Deserialize<ResponseMessageData>(jsonResponseData);
С основного сервиса у меня уходит ответ следующего вида:
responseMessage {TLmessanger.Models.ResponseMessageData} TLmessanger.Models.ResponseMessageData ByteQrcode null byte[] PhoneNumber null string Status "Not found" string TextMessage null string UserName null string
