public string Get(string str) { var method = str.ToLower(); switch (method) { case "get": { var res = _provider.Get <string>("demo"); return($"cached value : {res}"); } case "getset": { var res = _provider.Get("demo", () => "1-456", TimeSpan.FromHours(1)); return($"cached value : {res}"); } case "set": _provider.Set("demo", "1-123", TimeSpan.FromHours(1)); return("seted"); case "remove": _provider.Remove("demo"); return("removed"); default: return("default"); } }
public void Set_And_Get_Should_Succeed() { var cacheKey = $"{_namespace}_{Guid.NewGuid().ToString()}"; hybridCaching_1.Set(cacheKey, "val", TimeSpan.FromSeconds(30)); var res = hybridCaching_1.Get <string>(cacheKey); Assert.Equal("val", res.Value); }
public byte[]? Get(string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } var result = _hybridCachingProvider.Get <byte[]>(key); return((!result.HasValue || result.IsNull) ? null : result.Value); }
/// <summary> /// 检查token /// </summary> /// <param name="context"></param> /// <returns></returns> private async Task <bool> CheckToken(HttpContext context) { var tokenTxt = await context.GetTokenAsync("access_token"); var claimsInfo = GetClaimsInfo(tokenTxt); if (claimsInfo.Account.IsNotNullOrEmpty()) { var tokenKey = $"{tokenPrefx}:{claimsInfo.Account}:{claimsInfo.Id}"; var cahceToken = _cache.Get <string>(tokenKey).Value; return(cahceToken == claimsInfo.Token); } return(false); }
public T Get(string key, string region) { var cacheKey = $"{region}:{key}"; if (!_options.EnableHybrid) { var res = _provider.Get <T>(cacheKey); return(res.Value); } else { var res = _hybridProvider.Get <T>(region); return(res.Value); } }
public string Get(int type = 1) { if (type == 1) { _provider.Remove("demo"); return("removed"); } else if (type == 2) { _provider.Set("demo", "123", TimeSpan.FromMinutes(1)); return("seted"); } else if (type == 3) { var res = _provider.Get("demo", () => "456", TimeSpan.FromMinutes(1)); return($"cached value : {res}"); } else { return("error"); } }
public async Task Invoke(HttpContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var endpoint = context.GetEndpoint(); if (endpoint == null) { await _next(context); return; } var requiredValues = ((RouteEndpoint)endpoint).RoutePattern.RequiredValues; if (requiredValues.Count() == 0) { await _next(context); return; } var controller = requiredValues["controller"]?.ToString(); var action = requiredValues["action"]?.ToString(); if (string.IsNullOrEmpty(controller)) { await _next(context); return; } string tokenTxt = string.Empty; string refreshTokenTxt = string.Empty; //读取Request //context.Request.EnableBuffering(); //var requestReader = new StreamReader(context.Request.Body); //var requestContent = requestReader.ReadToEnd(); //context.Request.Body.Position = 0; // Allow Anonymous skips all authorization if (endpoint?.Metadata.GetMetadata <IAllowAnonymous>() != null) { //如果是调用登陆API并且调用成功,需要保存accesstoken道cache if (string.Equals(controller, "account", StringComparison.InvariantCultureIgnoreCase) && (string.Equals(action, "login", StringComparison.InvariantCultureIgnoreCase) || string.Equals(action, "refreshaccesstoken", StringComparison.InvariantCultureIgnoreCase)) ) { string responseContent; var originalBodyStream = context.Response.Body; using (var fakeResponseBody = new MemoryStream()) { context.Response.Body = fakeResponseBody; await _next(context); fakeResponseBody.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(fakeResponseBody)) { responseContent = await reader.ReadToEndAsync(); fakeResponseBody.Seek(0, SeekOrigin.Begin); await fakeResponseBody.CopyToAsync(originalBodyStream); } } if (context.Response.StatusCode == 200) { tokenTxt = JObject.Parse(responseContent).GetValue("token").ToString(); refreshTokenTxt = JObject.Parse(responseContent).GetValue("refreshToken").ToString(); var claimsInfo = GetClaimsInfo(tokenTxt); if (!string.IsNullOrEmpty(claimsInfo.Account)) { var key = $"{tokenPrefx}:{claimsInfo.Account}:{claimsInfo.Id}"; //_cache.SetString(key, claimsInfo.Token, new DistributedCacheEntryOptions { AbsoluteExpiration = claimsInfo.Expire }); _cache.Set(key, claimsInfo.Token, claimsInfo.Expire - DateTime.Now); var refreshTokenKey = $"{refreshTokenPrefx}:{claimsInfo.Account}:{claimsInfo.Id}"; //_cache.SetString(refreshTokenKey, refreshTokenTxt, new DistributedCacheEntryOptions { AbsoluteExpiration = DateTime.Now.AddMinutes(_jwtConfig.RefreshTokenExpire) }); _cache.Set(refreshTokenKey, refreshTokenTxt, TimeSpan.FromSeconds(_jwtConfig.RefreshTokenExpire)); } } } return; } tokenTxt = await context.GetTokenAsync("access_token"); //如果是调用注销API并且调用成功,需要从cahce移除accesstoken if (string.Equals(controller, "account", StringComparison.InvariantCultureIgnoreCase) && string.Equals(action, "logout", StringComparison.InvariantCultureIgnoreCase)) { await _next(context); if (context.Response.StatusCode == 200) { var claimsInfo = GetClaimsInfo(tokenTxt); if (!string.IsNullOrEmpty(claimsInfo.Account)) { var key = $"{tokenPrefx}:{claimsInfo.Account}:{claimsInfo.Id}"; var refreshTokenKey = $"{refreshTokenPrefx}:{claimsInfo.Account}:{claimsInfo.Id}"; //可以考虑事务操作,以后再优化 _cache.Remove(key); _cache.Remove(refreshTokenKey); } } return; } //如果是其他需要授权的API并且调用成功,需要从检查accesstoken是否在缓存中。 if (context.Response.StatusCode == 200) { var claimsInfo = GetClaimsInfo(tokenTxt); if (!string.IsNullOrEmpty(claimsInfo.Account)) { var key = $"{tokenPrefx}:{claimsInfo.Account}:{claimsInfo.Id}"; //var cahceToken = _cache.GetString(key); var cahceToken = _cache.Get <string>(key).Value; if (cahceToken != claimsInfo.Token) { await context.ForbidAsync(); } else { await _next(context); } } return; } }
public ActionResult <IEnumerable <string> > Get() { var res = _hybrid.Get <string>("cacheKey"); return(new string[] { "value1", "value2", res.Value }); }