AidopTenantHelper.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. using Admin.NET.Core;
  2. using Microsoft.AspNetCore.Http;
  3. namespace Admin.NET.Plugin.AiDOP.Infrastructure;
  4. /// <summary>
  5. /// 从 HTTP 请求(显式参数 / JWT / query tenantId)解析 TenantId;均无有效值时回退框架默认租户。
  6. /// </summary>
  7. public static class AidopTenantHelper
  8. {
  9. public static long GetTenantId(HttpContext? ctx) => Resolve(ctx);
  10. /// <summary>
  11. /// 解析租户:requestTenantId &gt; JWT Claim &gt; query tenantId &gt; DefaultTenantId。
  12. /// </summary>
  13. public static long Resolve(HttpContext? ctx, long? requestTenantId = null)
  14. {
  15. if (requestTenantId is > 0)
  16. return requestTenantId.Value;
  17. var claim = ctx?.User?.FindFirst(ClaimConst.TenantId)?.Value;
  18. if (!string.IsNullOrWhiteSpace(claim) && long.TryParse(claim, out var tid) && tid > 0)
  19. return tid;
  20. if (TryParseTenantId(ctx?.Request.Query["tenantId"].ToString(), out var queryTid))
  21. return queryTid;
  22. return SqlSugarConst.DefaultTenantId;
  23. }
  24. private static bool TryParseTenantId(string? raw, out long tenantId)
  25. {
  26. tenantId = 0;
  27. return !string.IsNullOrWhiteSpace(raw) && long.TryParse(raw.Trim(), out tenantId) && tenantId > 0;
  28. }
  29. }