using Admin.NET.Core; using Microsoft.AspNetCore.Http; namespace Admin.NET.Plugin.AiDOP.Infrastructure; /// /// 从 HTTP 请求(显式参数 / JWT / query tenantId)解析 TenantId;均无有效值时回退框架默认租户。 /// public static class AidopTenantHelper { public static long GetTenantId(HttpContext? ctx) => Resolve(ctx); /// /// 解析租户:requestTenantId > JWT Claim > query tenantId > DefaultTenantId。 /// public static long Resolve(HttpContext? ctx, long? requestTenantId = null) { if (requestTenantId is > 0) return requestTenantId.Value; var claim = ctx?.User?.FindFirst(ClaimConst.TenantId)?.Value; if (!string.IsNullOrWhiteSpace(claim) && long.TryParse(claim, out var tid) && tid > 0) return tid; if (TryParseTenantId(ctx?.Request.Query["tenantId"].ToString(), out var queryTid)) return queryTid; return SqlSugarConst.DefaultTenantId; } private static bool TryParseTenantId(string? raw, out long tenantId) { tenantId = 0; return !string.IsNullOrWhiteSpace(raw) && long.TryParse(raw.Trim(), out tenantId) && tenantId > 0; } }