ASP.NET Web API實現緩存的2種方式

 

在ASP.NET Web API中實現緩存大體有2種思路。一種是經過ETag, 一種是經過相似ASP.NET MVC中的OutputCache。

經過ETag實現緩存

首先安裝cachecow.server

install-package cachecow.server

在WebApiConfig中。html

 

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實現緩存"中也作了總結。

web

相關文章
相關標籤/搜索