【微信开发】—7200s限制,非数据库

两种微信缓存方式(7200s)

第一种是MemoryCache(缓存的分享票据)

  public static string Getjsapi_ticket(string AppID, string AppSecret)
        {
            string tt = "";
            string ticket = AddOrGetExisting<string>("ticket", delegate()
            {

                string strUrl = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
                WebResponse response = request.GetResponse();
                Stream resStream = response.GetResponseStream();
                StreamReader sr = new StreamReader(resStream);
                string result = sr.ReadToEnd();
                string regex = ""access_token":"(?<token>.*?)"";
                Match mt = Regex.Match(result, regex);
                string token = "";
                if (mt.Success)
                {
                    token = mt.Groups["token"].Value;
                }
                string jsapi_url = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token);
                HttpWebRequest jsapi_request = (HttpWebRequest)WebRequest.Create(jsapi_url);
                WebResponse jsapi_response = jsapi_request.GetResponse();
                Stream jsapi_resStream = jsapi_response.GetResponseStream();
                StreamReader jsapi_sr = new StreamReader(jsapi_resStream);
                string jsapi_result = jsapi_sr.ReadToEnd();
                string temp = jsapi_result.Split(',')[2];
                string jsapi_tic = temp.Split(':')[1];
                jsapi_tic = jsapi_tic.Substring(1, jsapi_tic.Length - 2);
                return jsapi_tic;
            },
                       new TimeSpan(0, 0, 7000)//7000秒过期
                   );

            return ticket;
        }
        static readonly ObjectCache cache = MemoryCache.Default;
        public static T AddOrGetExisting<T>(string key, Func<T> createNew, TimeSpan cacheDuration)
        {
            return AddOrGetExisting<T>(key, new TimeSpan(0, 0, 7000), createNew);
        }

        public static T AddOrGetExisting<T>(string key, TimeSpan cacheDuration, Func<T> createNew)
        {
            if (key == null) throw new ArgumentNullException("key");
            if (createNew == null) throw new ArgumentNullException("createNew");

            if (!cache.Contains(key))
            {
                cache.Add(key, createNew(), DateTime.Now.Add(cacheDuration));
            }

            return (T)cache[key];
        }

  第二种HttpContext.Current.Cache(缓存的access_token)

/// <summary>
/// 获取公众号的ACCESS_TOKEN
/// </summary>
/// <returns>返回操作凭据</returns>
public string GetAccessToken()
{
  if (HttpContext.Current.Cache["access_token"] == null)
   {
     string para = string.Format("grant_type=client_credential&appid={0}&secret={1}", AppID, AppSecret);
     string results = SendHTTPRequest("POST", "https://api.weixin.qq.com/cgi-bin/token", para);
     JObject obj = (JObject)JsonConvert.DeserializeObject(results);

     //设置access_token的过期

     Cache cache = HttpContext.Current.Cache;
     cache.Insert("access_token", obj["access_token"].ToString(), null, DateTime.Now.AddSeconds(7000),
      System.Web.Caching.Cache.NoSlidingExpiration);

     return HttpContext.Current.Cache["access_token"].ToString();
   }
   else
   {
     return HttpContext.Current.Cache["access_token"].ToString();
   }
}

  

原文地址:https://www.cnblogs.com/lb12081116/p/5226721.html