IMemoryCache 问题,无法转换为字符串?
IMemoryCache issues, cannot convert to string?
在Postman中发送请求时无法进入语句if (ConvertedAccessTokenCache.Contains(accessToken)),必须检查AccessTokenCache是否包含(accessToken) <- Authorization:Bearer c2E6dGVsZWFkcmU1NSxudA ==....
但是当它检查它是否包含我将鼠标悬停在该点上时得到的结果是 "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;
}
AccessTokenCache
是 MemoryCache 的一个实例,当您调用 ToString()
时,您称它为 default implementation,其中 returns 是全限定名称。
您需要调用 TryGetValue
或 AccessTokenCache.Get<String>("key")
等扩展方法之一。
扩展方法可能需要声明。在它们可用之前,您需要调用 TryGetValue
或 using 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;
}
}
}
在Postman中发送请求时无法进入语句if (ConvertedAccessTokenCache.Contains(accessToken)),必须检查AccessTokenCache是否包含(accessToken) <- Authorization:Bearer c2E6dGVsZWFkcmU1NSxudA ==....
但是当它检查它是否包含我将鼠标悬停在该点上时得到的结果是 "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;
}
AccessTokenCache
是 MemoryCache 的一个实例,当您调用 ToString()
时,您称它为 default implementation,其中 returns 是全限定名称。
您需要调用 TryGetValue
或 AccessTokenCache.Get<String>("key")
等扩展方法之一。
扩展方法可能需要声明。在它们可用之前,您需要调用 TryGetValue
或 using 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;
}
}
}