Неверное задание условия для Linux
Пишу код на винде, запускаю на линуксе. На винде всё отрабатывает так, как я и хочу. При запуске на линуксе - беда (я уже задавал похожий вопрос, что код на винде и линуксе отрабатывал по-разному, тогда решением было перезалить код на линукс ещё раз - в этот раз оно так не работает).
Вот код:
public class MainClass : Controller
{
private readonly ILogger<MainClass> _logger;
public MainClass(
ILogger<MainClass> logger)
{
_logger = logger;
}
[HttpPost]
// К сожалению, я либо пользуюсь библиотекой и принимаю object, а затем
// десериализовываю его до нужных мне классов, либо работаю без библиотеки.
// Сама библиотека на линуксе проверена - работает (хотя я, естественно, тестировал
// не абсолютно всё).
public async Task<IActionResult> Post([FromBody]object body)
{
_logger.LogInformation("1"); // В логах есть
// Финт ниже нужен, чтобы получилась не 1 строка Json, а красивый текст
// с отступами. Так как далее этот текст будет кинут в письме, это важно.
var originalBodyText = Convert.ToString(JObject.Parse(body.ToString()));
WebHookHandler webHookHandler = new WebHookHandler(originalBodyText, _logger);
// Отправка письма. Тут всё гладко и на винде, и на линуксе
return Ok();
}
private class WebHookHandler
{
public WebHookHandler(string originalJsonWebHook, ILogger logger)
{
logger.LogInformation(originalJsonWebHook); // В логах есть
if () // Условие, которое не выполняется в тестах
{
// Соответственно не сильно важно, что тут происходит
}
// Как я писал выше, originalJsonWebHook я кидаю по почте.
// И я абсолютно уверен, что строка
// " \"event_type\": \"PAYMENT.SALE.COMPLETED\",\r\n"
// там есть. Да и в логах originalJsonWebHook присутствует -
// там строка тоже етсь.
else if (originalJsonWebHook.Contains("\"event_type\": \"PAYMENT.SALE.COMPLETED\",\r\n"))
{
logger.LogInformation("2"); // В логах отсутствует
// Дальнейшая логика
}
else
{
logger.LogInformation("3"); // В логах есть
}
}
}
При этом logger.LogInformation("2") на винде отрабатывает. Для тестов я один и тот же запрос кидал себе на линукс и на винду - я попадал в разные ветки условий. Может ли быть такое, что линукс по-другому обрабатывает строки? Или ошибка ещё в чём-то?
UPD: Сейчас ещё запускал код - logger.LogInformation(originalJsonWebHook) отсутствует в логах... Это при том, что ПОСЛЕ него идёт задание параметров письма, а письмо приходит не пустое.
Ответы (1 шт):
Похожий вопрос - мой вопрос можно считать дубликатом.
Тем не менее, отдельная благодарность пользователям @ExplodingKitten, @AlexanderPetrov и @rdorn за полезные советы.
Решением проблемы оказалось использование if (originalJsonWebHook.IndexOf($"\"event_type\": \"PAYMENT.SALE.COMPLETED\",{Environment.NewLine}")!=-1) вместо Contains.
Для меня загадкой остаётся то, почему Contains по-разному отработал на винде и линуксе.