通常情况下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被创建后未曾被改变过。

ASP.NET Web API中通过ETag实现缓存的更多相关文章

  1. ASP.NET Web API中的参数绑定总结

    ASP.NET Web API中的action参数类型可以分为简单类型和复杂类型. HttpResponseMessage Put(int id, Product item) id是int类型,是简单 ...

  2. ASP.NET Web API中的Controller

    虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要 ...

  3. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  4. ASP.NET Web API 中的异常处理(转载)

    转载地址:ASP.NET Web API 中的异常处理

  5. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  6. Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

    前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...

  7. ASP.NET WEB API 中的路由调试与执行过程跟踪

    路由调试 RouteDebugger 是调试 ASP.NET MVC 路由的一个好的工具,在ASP.NET WEB API中相应的有 WebApiRouteDebugger ,Nuget安装 Inst ...

  8. 能省则省:在ASP.NET Web API中通过HTTP Headers返回数据

    对于一些返回数据非常简单的 Web API,比如我们今天遇到的“返回指定用户的未读站内短消息数”,返回数据就是一个数字,如果通过 http response body 返回数据,显得有些奢侈.何不直接 ...

  9. 【ASP.NET Web API教程】5.5 ASP.NET Web API中的HTTP Cookie

    原文:[ASP.NET Web API教程]5.5 ASP.NET Web API中的HTTP Cookie 5.5 HTTP Cookies in ASP.NET Web API 5.5 ASP.N ...

随机推荐

  1. mysql学习------二进制日志

    一.什么是二进制日志 1.记录对数据发生或潜在发生更改的sql语句 2.二进制格式保存 3.用途广泛,包括 a.查看数据库变更历史 b.数据库增量备份 c.数据库灾难恢复 d.mysql replic ...

  2. MongoDB 3.x 安装及权限验证

    1.首先在网上下载MongoDB的安装包,我这边使用的是3.2版本: 2.安装MongoDB安装程序,安装完成后设置环境变量,我这边的安装路径是:“C:\Program Files\MongoDB\S ...

  3. 在VMware上安装Ubuntu软件步骤与遇到的相关问题及解决方案

    图解演示环境版本: 本机系统: WIN10 虚拟机:VMware Workstation 12(中文版) 安装目标:Ubuntu Desktop 12.04 LTS  (请点击这里)先下载好iso镜像 ...

  4. 移动端调试工具---vConsole

    vConsole:https://github.com/Tencent/vConsole/blob/dev/README_CN.md 使用方法: 使用npm进行安装: npm install --sa ...

  5. Spring Cloud微服务视频教程-百度云

    Spring Cloud微服务视频教程-百度云 链接:https://pan.baidu.com/s/1mp8SkxNw7EfoTDtDKQMpIA 提取码: 关注公众号[GitHubCN]回复521 ...

  6. WebAPI性能优化

    WebAPI性能优化之压缩解压 有时候为了提升WebAPI的性能,减少响应时间,我们会使用压缩和解压,而现在大多数客户端浏览器都提供了内置的解压支持.在WebAPI请求的资源越大时,使用压缩对性能提升 ...

  7. php 导入excel文件

    excel.php <?phprequire_once 'PHPExcel/PHPExcel.php';require_once 'PHPExcel/PHPExcel/IOFactory.php ...

  8. Hashmap jdk7 死循环

    如果理解的有问题,欢迎大家指正. https://www.cnblogs.com/webglcn/p/10587708.html jdk7的hashmap 由数组和链表组成,存在几个问题: 当key的 ...

  9. JAVA 图形开发之计算器设计(事件监听机制)

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 前段时间刚帮同学用MFC写了个计算器,现在学到JAVA的图形开发,就试着水了一个计算器出来.(可以说 ...

  10. ApiPost接口调试工具模拟Post上传文件(中文版Postman)

    ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工具 . A ...