Я создал простое приложение API отслеживания игроков в ASP. NET Core 3.1, которое использует Azure Cosmos DB в качестве внутреннего интерфейса.
API для создания новой записи игрока сначала проверяет, существует ли запись с таким же идентификатором под данным ключом раздела в базе данных Cosmos, используя это:
try
{
ItemResponse<Player> response = await this._playerContainer.ReadItemAsync<Player>(playerid, new PartitionKey(partitionkey));
return Conflict();
}
catch (CosmosException ex) when (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
{
// There is some more logic happening here so I cannot directly just call CreateItemAsync()... and return the Conflict response that this might return.
ItemResponse<GameResult> response = await this._gameResultContainer.CreateItemAsync<GameResult>(gameresult, new PartitionKey(gameresult.PlayerId));
// ...
return Accepted();
}
Только если это ничего не возвращает Я впереди go и помещаю запрос на создание в рабочую очередь бэкэнда. В противном случае я возвращаю 409-Conflict вызывающей стороне API.
Фактическая вставка происходит в asyn c бэкэнд-работнике. Но я хочу вернуться к вызывающему API напрямую, если его вставка будет успешной.
Пока все работает нормально. Проблема, с которой я столкнулся, заключается в следующем: поскольку я использую Azure Application Insights SDK, любой вызов, который не находит существующий элемент (что должно быть обычным случаем здесь), автоматически создает ошибку в AppInsights - даже если я поймать исключение в моем коде. Это, очевидно, немного загромождает мою регистрацию.
Есть идеи, как мне от этого избавиться или вообще как изменить API, чтобы получить лучшее поведение для этого?