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被创建后未曾被改变过。

  • 相关阅读:
    sdut 2413:n a^o7 !(第三届山东省省赛原题,水题,字符串处理)
    poj 2406:Power Strings(KMP算法,next[]数组的理解)
    hrbustoj 1551:基础数据结构——字符串2 病毒II(字符串匹配,BM算法练习)
    hrbustoj 1179:下山(DFS+剪枝)
    [Linux] 通过指令修改时区 tzselect
    Ubuntu 历史版本下载
    RK3288 USB UVC camera 摄像头 VIDIOC_DQBUF Failed!!! err[I/O error]
    Android Activity活动状态及生存周期
    Android 系统四大组件
    Android JNI访问Java成员
  • 原文地址:https://www.cnblogs.com/darrenji/p/5143722.html
Copyright © 2011-2022 走看看