如何将Azure AD令牌模型的DateTimeOffset类型ExpiresIn转换为秒数
解决方案
你代码中的tokenModel.ExpiresIn是DateTimeOffset类型的绝对过期时间点,而TimeSpan.FromSeconds()要求传入的是距离当前时间的相对秒数,所以需要先计算当前UTC时间和过期时间的差值,再提取总秒数即可。
实现代码
// 计算UTC时间下的剩余有效秒数 double remainingValidSeconds = (tokenModel.ExpiresIn - DateTimeOffset.UtcNow).TotalSeconds; // 边界处理:如果令牌已过期,剩余秒数设为0,避免不符合预期的缓存配置 remainingValidSeconds = Math.Max(remainingValidSeconds, 0); // 赋值给缓存过期配置 entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(remainingValidSeconds);
额外优化建议
- 模型命名调整:你当前
AadToken类里的字段名为ExpiresIn,但存储的是绝对过期时间,和行业通用命名习惯不符(ExpiresIn通常用来指代相对当前的有效时长,单位一般为秒),建议将字段重命名为ExpiresOn,降低后续维护的理解成本。
内容的提问来源于stack exchange,提问作者user584018
相关产品推荐
相关产品推荐

