细说 ASP.NET Cache 及其高级用法
程序员文章站
2023-01-11 16:48:09
持续更新 Cache记录 推荐博客:细说 ASP.NET Cache 及其高级用法 1 #region 缓存 2 3 /// 4 /// 设置Cache 5 /// 6 /// cache名称 7 /// ......
持续更新
cache记录
1 #region 缓存 2 3 /// <summary> 4 /// 设置cache 5 /// </summary> 6 /// <param name="key">cache名称</param> 7 /// <param name="value">cache值</param> 8 void setcachedata(string key, string value,datetime time) 9 { 10 cache cache = httpcontext.current.cache; 11 cache["test"] = 1; 12 cache.insert(key, value, null, time, cache.noslidingexpiration); 13 } 14 15 /// <summary> 16 /// 获取 cache 17 /// </summary> 18 /// <param name="key">cache值</param> 19 /// <returns></returns> 20 object getcachedata(string key) 21 { 22 cache cache = httpruntime.cache; 23 if (cache[key] != null) 24 { 25 return cache[key]; 26 } 27 else 28 { 29 return ""; 30 } 31 } 32 33 /// <summary> 34 /// 判断指定cache是否存在 35 /// </summary> 36 /// <param name="key"></param> 37 /// <returns></returns> 38 bool iscacheexits(string key) 39 { 40 cache s = httpruntime.cache; 41 return s[key] != null; 42 } 43 44 /// <summary> 45 /// 移除指定cache 46 /// </summary> 47 /// <param name="key">cache名称</param> 48 void removecachedata(string key) 49 { 50 cache cache = httpruntime.cache; 51 cache.remove(key); 52 } 53 54 /// <summary> 55 /// 移除所有cache 56 /// </summary> 57 void removeallcachedata() 58 { 59 cache cache = httpruntime.cache; 60 idictionaryenumerator cacheneunm = cache.getenumerator(); 61 while (cacheneunm.movenext()) 62 { 63 cache.remove(cacheneunm.key.tostring()); 64 } 65 } 66 #endregion
获取微信access_token
1 class wxresult 2 { 3 public string access_token { get; set; } 4 public string expires_in { get; set; } 5 } 6 7 8 /// <summary> 9 /// 缓存的是整个微信返回的json,可以转换成对象获取access_token 10 /// </summary> 11 /// <returns></returns> 12 string getaccesstoken() 13 { 14 var appid = ""; 15 var appresect = ""; 16 //判断access_token是否存在 17 if (iscacheexits("access_token")) 18 { 19 return getcachedata("access_token").tostring(); 20 } 21 else 22 { 23 var url = 24 $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appresect}"; 25 var accesstoken = httpgetvalue(url); 26 setcachedata("access_token",accesstoken,datetime.now.addhours(2));//这里缓存的是整个对象 27 return accesstoken; 28 } 29 } 30 31 /// <summary> 32 /// get方式请求 获取微信返回的json 33 /// </summary> 34 /// <param name="url"></param> 35 /// <returns></returns> 36 string httpgetvalue(string url) 37 { 38 //创建一个httpwebrequest 39 httpwebrequest webrequest = webrequest.createhttp(url); 40 //get 方式传输 41 webrequest.method = "get"; 42 //获取返回 43 webresponse webresponse = webrequest.getresponse(); 44 //从stramreader中读取返回的流 45 string streamreader = new streamreader(webresponse.getresponsestream(), encoding.utf8).readtoend(); 46 return streamreader; 47 } 48 49 //调用 50 var accesstoken = getaccesstoken(); 51 //需要引用newtonsoft.json 52 var wxres = jsonconvert.deserializeobject<wxresult>(accesstoken); 53 accesstoken = wxres.access_token;
获取微信小程序码
1 void htpppostvalue(string accesstoken) 2 { 3 var url = $"https://api.weixin.qq.com/wxa/getwxacode?access_token={accesstoken}"; 4 httpwebrequest webrequest = webrequest.createhttp(url); 5 webrequest.method = "post"; 6 string str = "{\"path\":\" path\",\"width\":1000}"; 7 byte[] data = encoding.utf8.getbytes(str); 8 webrequest.contentlength = data.length; 9 stream outstream = webrequest.getrequeststream(); //写入的流 10 outstream.write(data, 0, data.length); 11 outstream.close(); 12 httpwebresponse response = webrequest.getresponse() as httpwebresponse; 13 stream insstream = response.getresponsestream(); 14 var imgname = datetime.now.millisecond + ".jpg"; 15 var path = mappath("/content/" + imgname); 16 image img = image.fromstream(insstream); 17 img.save(path); 18 }
获取微信access_token 使用httpclient
1 string getaccesstokenwithhttpclient() 2 { 3 var appid = "自己appid"; 4 var appresect = "自己appresect"; 5 //实例化httpclient 对象 6 httpclient client = new httpclient(); 7 var url = 8 $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appresect}"; 9 //使用getasybc(string url)方法异步获取httpresponsemessage .result使用的是同步方法 10 httpresponsemessage responesemessage = client.getasync(url).result; 11 client.dispose(); 12 //返回的是一个json对象 13 return responesemessage.content.readasstringasync().result; 14 }
获取微信小程序码 使用httpclient
1 void postaccesstokenwithhttpclient(string accesstoken) 2 { 3 var url = $"https://api.weixin.qq.com/wxa/getwxacode?access_token={accesstoken}"; 4 string str = "{\"path\":\" path\",\"width\":1000}"; 5 //实例化httpclient 对象 6 httpclient client = new httpclient(); 7 // 把需要传输的转换httpcontent 对象 8 httpcontent content = new stringcontent(str,encoding.utf8); 9 //使用postasync(string url, htppcontent content).result 获取返回的响应消息 10 httpresponsemessage response = client.postasync(url, content).result; 11 //从响应消息中获取返回的信息 使用result 同步方法 12 stream stream = response.content.readasstreamasync().result; 13 //二进制流转换成img 14 using (image img = image.fromstream(stream)) 15 { 16 var imgname ="123哈哈"+ datetime.now.millisecond + ".jpg"; 17 var path = mappath("/content/" + imgname); 18 img.save(path); 19 } 20 21 }