Forge
csharpdeeb25a2
1using System.Text.Json;
2
3namespace CascadeIDE.Features.WebAiPortal.Application;
4
5/// <summary>
6/// Стабильный ключ для того, чтобы не выполнять одну и ту же команду со страницы в цикле poll.
7/// </summary>
8internal static class WebAiPortalBridgePayloadDedup
9{
10 private static readonly JsonSerializerOptions Canonical =
11 new()
12 {
13 WriteIndented = false,
14 };
15
16 /// <summary>
17 /// Детерминированная строка по разобранному JSON (пробелы/порядок полей на входе не должны плодить дублей).
18 /// </summary>
19 public static bool TryCanonicalKey(string jsonPayload, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string? key)
20 {
21 key = null;
22 try
23 {
24 using var doc = JsonDocument.Parse(jsonPayload);
25 key = JsonSerializer.Serialize(doc.RootElement, Canonical);
26 return !string.IsNullOrEmpty(key);
27 }
28 catch (JsonException)
29 {
30 return false;
31 }
32 }
33}
34
View only · write via MCP/CIDE