【问题标题】:IMemoryCache issues, cannot convert to string?IMemoryCache 问题,无法转换为字符串?
【发布时间】:2017-04-04 23:20:28
【问题描述】:

当我在 Postman 中发送请求时,我无法输入语句 if (ConvertedAccessTokenCache.Contains(accessToken)),我必须检查 AccessTokenCache 是否包含 (accessToken)

但是当它检查它是否包含我将鼠标悬停在该点上时,我得到“Microsoft.Extensions.Caching.Memory.MemoryCache”作为结果..

任何想法我缺少什么?

namespace ....Security.Token
    {
        public class TokenManager
        {
            private readonly IMemoryCache AccessTokenCache;
            private readonly IMemoryCache RefreshTokenCache;
            private CancellationTokenSource ctsAccess;
            private CancellationTokenSource ctsRefresh;

            private readonly uint RefreshTokenValidTime = 60 * 60 * 10; //seconds
    #if DEBUG
            private readonly uint TokenExpirationTime = 60 * 60 * 2; //seconds
    #else
            private readonly uint TokenExpirationTime = 60 * 5; //seconds
    #endif

            public TokenManager()
            {
                AccessTokenCache = new MemoryCache(new MemoryCacheOptions());
                RefreshTokenCache = new MemoryCache(new MemoryCacheOptions());
                ctsAccess = new CancellationTokenSource(60 * 60 * 2);
                ctsRefresh = new CancellationTokenSource(60 * 60 * 10);
            }

            public long ValidateToken(string accessToken)
            {
                var ConvertedAccessTokenCache = AccessTokenCache.ToString();

                if (ConvertedAccessTokenCache.Contains(accessToken))
                {
                    var token = (TokenResponse)AccessTokenCache.Get(accessToken);

                    var createdDate = GetCreatedDate(accessToken);
                    var validToDate = createdDate.AddSeconds(token.expires_in);

                    var clientId = GetClientId(accessToken);

                    if (validToDate > SystemTime.Now())
                    {
                        return clientId;
                    }
                }

                return -1L;
            }

        }
    }




public UserEntity GetUser(string credentials)
        {
            var token = new TokenManager();
            var clientId = token.ValidateToken(credentials);
            if (clientId == -1)
            {
                return null;
            }

            var user = Execute(context =>
            {
                var command = new GetCommand<UserEntity>(c => c.UserDataAccess.GetUser(clientId));
                return command.Execute(null, false, context);
            });

            return user;
        }

【问题讨论】:

  • 还有你调用ValidateToken(...)....的代码???
  • 现已编辑,很抱歉错过了!
  • 那你需要再往上走。好像你在某处打电话给cache.ToString() 而不是cache.GetString(...)
  • 我正在调用 var ConvertedAccessTokenCache = AccessTokenCache.ToString();,问题是 GetString 不可用:/

标签: asp.net-core asp.net-core-mvc asp.net-core-1.1


【解决方案1】:

AccessTokenCache 是 MemoryCache 的一个实例,当您调用 ToString() 时,您称它为 default implementation,它返回全限定名称。

您需要调用TryGetValueAccessTokenCache.Get&lt;String&gt;("key") 等扩展方法之一。

扩展方法可能需要声明。您需要在它们可用之前调用TryGetValueusing Microsoft.Extensions.Caching.Memory 等扩展方法之一。

public long ValidateToken(string accessToken)
{
    // Get<TokenResponse> or TryGetValue will return default value if not found
    // which is null in case of string and classes
    var token = AccessTokenCache.Get<TokenResponse>(accessToken);

    if (token != null)
    {
        var createdDate = GetCreatedDate(accessToken);
        var validToDate = createdDate.AddSeconds(token.expires_in);

        var clientId = GetClientId(accessToken);

        if (validToDate > SystemTime.Now())
        {
            return clientId;
        }
    }
}

【讨论】:

  • 谢谢,这有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多