12345678910111213141516171819202122232425262728293031323334 |
- using System.Linq;
- using System.Net.Http;
- using System.Net.Http.Headers;
- using System.Web;
- using System.Web.Http.Controllers;
- using iiie.CacheControl.Business.OutputCache;
- using Newtonsoft.Json;
-
- namespace iiie.CacheControl.Business.CacheKey
- {
- public class DefaultCacheKeyGenerator : ICacheKeyGenerator
- {
- public virtual string MakeCacheKey(HttpActionContext context, MediaTypeHeaderValue mediaType,
- OutputCacheType cacheType, bool excludeQueryString = false, bool excludePost = false)
- {
- string parameters = context.Request.Method.Method + "-" + context.Request.RequestUri.AbsolutePath;
-
- if (!excludeQueryString)
- {
- var pairs = context.Request.GetQueryNameValuePairs().OrderBy(x => x.Key);
- parameters += "?" + string.Join("&", pairs.Select(x => HttpUtility.UrlEncode(x.Key)
- + "=" + HttpUtility.UrlEncode(x.Value)));
- }
- if (!excludePost)
- {
- parameters += "?" + string.Join("&", context.ActionArguments.Select(x => HttpUtility.UrlEncode(x.Key)
- + "=" + HttpUtility.UrlEncode(JsonConvert.SerializeObject(x.Value))));
- }
-
- var cachekey = string.Format("{0}:{1}", parameters, mediaType.MediaType);
- return cachekey;
- }
- }
- }
|