標籤:
在ASP.NET Web API中實現緩衝大致有2種思路。一種是通過ETag, 一種是通過類似ASP.NET MVC中的OutputCache。
通過ETag實現緩衝
首先安裝cachecow.server
install-package cachecow.server
在WebApiConfig中。
public static class WebApiConfig{ public static HttpConfiguraiton Register() { var config = new HttpConfiguration(); //支援通過特性設定路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( "DefaultRouting", "api/{controller}/{id}", defaults:new {id = RouteParamter.Optional} ); //config.Formatters.JsonFormatter.SupportedMediaTypes .Add(new MediaTYpeHeaderValue("text/html")); config.Formatters.XmlFormatter.SupportedMediaType.Clear(); config.Foramtters.JsonFormatter.SuppoortedMediaTypes.Add( new MediaTypeHeaderValue("application/json-patch+json"); ); config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCaseProeprtyNamesContractResolver(); //HTTP緩衝 預設緩衝在記憶體中 config.MessageHandlers.Add(new CacheCow.Server.CachingHandler(config)); return config; }}
→ 用戶端發出請求
GET http://localhost:43321/api/groups/1
→ 返回200狀態代碼,在響應的Headers中:
ETag:W/"..."
Last-Modified:...
→ 再次請求,通過If-None-Match屬性把ETag帶上。
GET http://localhost:43321/api/groups/1
Host:localhost:43321
If-None-Match:ETag:W/""
→ 返回304狀態代碼
通過OutputCache實現緩衝
在ASP.NET Web API中實現緩衝的另外一種思路是通過類似ASP.NET MVC中的OutputCache,具體可參考:Strathweb.CacheOutput.WebApi2
有關ASP.NET Web API緩衝,在"ASP.NET Web API中通過ETag實現緩衝"中也做了總結。
ASP.NET Web API實現緩衝的2種方式