/
Kovalenko
/
TODO
Обзор
Документация
Войти
/
Kovalenko
/
TODO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
lab4
TaskApi/Controllers/RabbitMqHttpHelpers.cs
98 строк
3 KB
Kovalenko1
smth
07 мар 2026, 10:39
07 мар 2026, 10:39
9157b62
Код
Авторство
О чём код?
using System.Text.Json; using Microsoft.AspNetCore.Mvc; using TaskApi.Messages; namespace TaskApi.Controllers; internal static class RabbitMqHttpHelpers { public static ApiRequest BuildRequest(string version, string action, object payload, string auth = "") => new() { Id = Guid.NewGuid().ToString(), Version = version, Action = action, Data = JsonSerializer.SerializeToElement(payload), Auth = auth }; public static string ExtractToken(string? authorization, string? fallback = null) { var candidate = string.IsNullOrWhiteSpace(authorization) ? fallback : authorization; if (string.IsNullOrWhiteSpace(candidate)) { return string.Empty; } return candidate.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase) ? candidate[7..] : candidate; } public static bool TryReadData<T>(ApiResponse response, out T? value) { value = default; if (response.Data is null) { return false; } if (response.Data is T direct) { value = direct; return true; } try { if (response.Data is JsonElement json) { value = json.Deserialize<T>(); } else { value = JsonSerializer.Deserialize<T>(JsonSerializer.Serialize(response.Data)); } return value is not null; } catch { return false; } } public static ActionResult MapError(ControllerBase controller, ApiResponse response) { var error = response.Error?.Trim(); if (string.IsNullOrWhiteSpace(error)) { return controller.BadRequest("Request processing failed."); } var normalized = error.ToLowerInvariant(); if (normalized.Contains("токен") || normalized.Contains("unauthorized") || normalized.Contains("forbidden")) { return controller.Unauthorized(); } if (normalized.Contains("не найдена") || normalized.Contains("not found")) { return controller.NotFound(error); } if (normalized.Contains("already") || normalized.Contains("уже") || normalized.Contains("конфликт")) { return controller.Conflict(error); } if (normalized.Contains("timeout") || normalized.Contains("таймаут")) { return controller.StatusCode(StatusCodes.Status504GatewayTimeout, error); } return controller.BadRequest(error); } }