Вернуть StatusCode с индивидуальным сообщением - PullRequest
0 голосов
/ 07 мая 2020

У меня есть приложение C#, которое может генерировать заблокированное исключение. Я хотел бы вернуть Microsoft.AspNetCore. Mvc .StatusCode из HttpStatusCode.Locked и добавить настраиваемое сообщение в ответ.

В настоящее время в контроллере, если я использую:

        [ProducesResponseType(StatusCodes.Status423Locked)]
        public async Task<IActionResult> GetSomething(Guid id)
        {
            try
            {
                await MyService
                    .GetAsync(id)
                    .ConfigureAwait(false);

                return Ok();
            }
            catch (IsLockedException ex)
            {
                return StatusCode((int)HttpStatusCode.Locked, ex.Message);
            }

Он просто возвращает текст сообщения об исключении, например:

The organisation 6ad1f1c0-2c47-4849-acbb-9eca56b568cf is offline.

Однако, если я изменю возврат на:

return StatusCode((int)HttpStatusCode.Locked);

, он вернет следующий ответ:

{
    "status": 423,
    "traceId": "|8f3060e2-4338773910204188."
}

Могу ли я сохранить в ответе как «статус», так и настраиваемый текст?

1 Ответ

1 голос
/ 07 мая 2020

Не используйте строку при вызове StatusCode(), используйте объект, и он будет правильно сериализован.

Пример:

return StatusCode((int)HttpStatusCode.Locked, new { status = (int)HttpStatusCode.Locked, message = ex.Message });
...