zoukankan      html  css  js  c++  java
  • ASP.NET Web API中通过ETag实现缓存

    通常情况下Server是无状态的,在ASP.NET Web API中,我们可以让服务端响应体中产生ETag属性,起到缓存的作用。大致实现原理是:

    1、服务端的响应体中返回一个ETag属性
    2、客户端通过If-None-Match属性把ETag的属性值传递给服务端
    3、服务端返回304状态码

    响应体中返回ETag属性

    安装CacheCow.Server

    在WebApiConfig.cs中配置:

    using CacheCow.Server;

    var cacheHandler = new CachingHandler();
    config.MessageHandlers.Add(cacheHandler);

    此时,在客户端发出请求:

    User-Agent:Fiddler
    Host:localhost:8901

    在返回的消息中存在一个ETag属性。

    ETag:W/"..."

    通常情况下,服务器重启或IIS重启都会影响ETag的值。

    此时,再把ETag放到请求体中:

    User-Agent:Fiddler
    Host:localhost:8901
    If-None-Match:"..."

    服务端返回304 Not Found.意味着自从Entity被创建后未曾被改变过。

    响应体中返回ETag, LastModified属性

    var cacheHandler = new CachingHandler();
    cacheHandler.AddLastModifiedHeader = false;//默认为true
    config.MessageHandlers.Add(cacheHandler);

    此时,在客户端发出请求:

    User-Agent:Fiddler
    Host:localhost:8901

    在返回的消息中存在一个ETag属性。

    ETag:W/"..."

    此时,再把ETag放到请求体中:

    User-Agent:Fiddler
    Host:localhost:8901
    If-None-Match:"..."

    服务端返回304 Not Found.并且有Last-Modified属性,表示上次修改的时间。

    响应体中返回与Sql Server相关的ETag属性

    安装CacheCow.Server.EntityTagStore.SqlServer

    var connString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
    var etagStore = new SqlServerEntityTagStore(connString);
    var cacheHandler = new CacheHandler(etagStore);
    config.MessageHandlers.Add(cacheHandler);

    还要在Sql Server上加一个存储过程。

    →打开项目所在文件夹
    →packages文件夹
    →CacheCow.Server.EntityTagStore.SqlServer.0.4.1文件夹
    →scripts下的script.sql文件,复制其中的语句,在Sql Server上创建对应的表和存储过程。

    此时,在客户端发出请求:

    User-Agent:Fiddler
    Host:localhost:8901

    在返回的消息中存在一个ETag属性。

    ETag:"..."

    但此时ETag的属性值没有以"W/"开头。

    此时,再把ETag放到请求体中:

    User-Agent:Fiddler
    Host:localhost:8901
    If-None-Match:"..."

    服务端返回304 Not Found.意味着自从Entity被创建后未曾被改变过。

  • 相关阅读:
    [Knowledge-based AI] {ud409} Lesson 16: 16
    [Knowledge-based AI] {ud409} Lesson 15: 15
    [Knowledge-based AI] {ud409} Lesson 14: 14
    [Knowledge-based AI] {ud409} Lesson 13: 13
    [Knowledge-based AI] {ud409} Lesson 12: 12
    [Knowledge-based AI] {ud409} Lesson 11: 11
    [Knowledge-based AI] {ud409} Lesson 10: 10
    [Knowledge-based AI] {ud409} Lesson 9: 09
    列表,元组,字典
    Django项目导入到pycharm提示错误的解决办法
  • 原文地址:https://www.cnblogs.com/darrenji/p/5143722.html
Copyright © 2011-2022 走看看