namespace BoardApp.Services; public static class BoardUrlResolver { public static string ResolveBoardUrl(string? dataEasePublicBase, string boardUrl) { var raw = (boardUrl ?? "").Trim(); if (raw.Length == 0) return raw; if (raw.StartsWith("http://", StringComparison.OrdinalIgnoreCase) || raw.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) { return raw; } var baseUrl = (dataEasePublicBase ?? "").Trim().TrimEnd('/'); if (baseUrl.Length == 0) { throw new InvalidOperationException("app.config.json 中 dataEasePublicBase 未配置,无法解析相对 boardUrl"); } var path = raw.StartsWith("/") ? raw : "/" + raw; return $"{baseUrl}/#{path}"; } }