我想玩动作过滤器创建和实施ETag的动作过滤器,并使HomeController从mvc 4模板缓存10秒。
以下是我的属性:
public class EtagFilterAttribute : ActionFilterAttribute
{
private DateTime _currentTime = DateTime.Now;
private string _currentEtag = string.Empty;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var httpContext = filterContext.RequestContext.HttpContext;
string eTag = httpContext.Request.Headers["ETag"];
string responseETag = GetEtag();
if (!string.IsNullOrEmpty(eTag))
{
if (eTag.Equals(responseETag))
{
filterContext.HttpContext.Response.StatusCode = 304;
filterContext.HttpContext.Response.StatusDescription = "Not Modified";
}
return;
}
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
filterContext.HttpContext.Response.AddHeader("ETag", responseETag);
filterContext.HttpContext.Response.Cache.SetETag(responseETag);
}
private string GetEtag()
{
if (_currentTime <= DateTime.Now.AddSeconds(10))
{
return _currentEtag;
}
_currentEtag = GenerateEtag();
return _currentEtag;
}
private string GenerateEtag()
{
return Guid.NewGuid().ToString().Substring(0, 20);
}
}
这是HomeController:
public class HomeController : Controller
{
[EtagFilter]
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
[EtagFilter]
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
[EtagFilter]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
它已编译并运行,但在Chrome开发工具网络中-
请求URL: http://: 1772/Home/关于请求方法: GET状态码: 200 OK请求Headersview源接受: text/html,应用程序/xhtml xml,应用程序/xml; q=0.9,/; q=0.8接受-编码: gzip,泄气, sdch接受-语言: en-US, en; q=0.8连接:保活Cookie:__RequestVerificationToken=q0yQrf5ee5bsOW-1OXK754FeRZM89uNQQ1rvN2cVRXaHsPGhOTt2zw2cUyfmu-0uZGLL5-ebs-iJH1-RQ3Q7qb6z4jTHNY8yGJQ3KBYhRs1主机:<--PLHD--0/>引用者:http://: 1772/User-Agent: Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,像壁虎)Chrome/29.0.1547.76Safari /537.36响应头视图源缓存控制:私有内容编码: gzip内容长度: 956内容类型:文本/html;charset=utf-8日期:星期五,2013 15:34:0210月4日格林尼治标准时间服务器:Microsoft IIS/8.0变化:接受编码X-AspNet-Version: 4.0.30319 X-AspNetMvc-Version: 4.0 X-Powerd-By: ASP. NET X-SourceFiles:=?UTF-8?B?ZDpcTXlEb2N1bWVudHNcR2VuZXJhbFxDI1wuTmV0IE1lbnRvcmluZyBQcm9ncmFtXEhUVFBcRXhhbXBsZVxIdHRwRm9yRGV2ZWxvcGVyc1xIb21lXEFib3V0?=
你能告诉我哪里错了吗?
这个作品:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var httpContext = filterContext.RequestContext.HttpContext;
string eTag = httpContext.Request.Headers["ETag"];
string responseETag = GetEtag();
if (!string.IsNullOrEmpty(eTag))
{
if (eTag.Equals(responseETag))
{
filterContext.HttpContext.Response.StatusCode = 304;
filterContext.HttpContext.Response.StatusDescription = "Not Modified";
}
return;
}
httpContext.Response.AddHeader("ETag", responseETag);
}
如何在Google Cloud上查看日志消息?:https://console.cloud.google.com/logs 这是我在运行dev_appserver.py(本地运行)时在终端中看到的: 将显示应用程序日志消息和请求日志记录。 但是,当我查看部署的相同代码的日志时,我只能看到正在记录的请求: 我用来生成应用程序日志消息的代码如下: 但我也尝试过直接使用<code>logging.inf
在React Native应用程序中实现以下场景的最佳方式是什么? 向服务器发出HTTP请求,获取JSON响应和ETag头 保存此JSON响应的方式即使在用户重新启动应用程序后也会持续 每当重复此HTTP请求时,发送If-None-Match头。 当您得到“未修改”响应时,请使用持久化缓存中的版本 当您得到“成功”响应(表示响应已更改)时,使持久化缓存无效,保存新响应 React Native有现
我希望能够识别唯一的匿名用户,所以我可以在数据库中为该用户存储一些信息。一个客人购物车之类的东西。 我并不特别想使用会话,因为如果我一直使用无会话数据方法构建,我喜欢服务器之间的故障转移。 在spring security或generic spring中,是否有任何方法可以获得一个标识令牌,我可以使用它来标识特定的匿名用户(主键)?
大家好,我正在学习如何使用Spring,我没有MVC方面的经验。 所以我正在创建一个网站,对mysql数据库的数据进行注册、注销和更改。登录和数据库插入都准备好了,但我不能删除注册用户部分。 我的模型: 我的控制器: 我的服务和实施: 实施: 最后是StudentDeleteRepository: 学习积极性。JAVA 在我的删除中。jsp都是从以下内容开始的: 我得到了这个错误: 这部分是: 为
我想运行节点。js与asp。net mvc用于执行套接字。io操作。 我已经成功地包含了节点。js在asp。net mvc,如本文所述 我的问题是如何在ASP.NET MVC中运行express.js, 我已经在Global.asax.cs文件中执行了url重写,如< br > void Application_BeginRequest(对象发送方,EventArgs e) { //获取当前路径
我有一个Spring Boot应用程序,我在pom中定义了我的thymeleaf依赖项。包含以下行的xml: 因此,当我启动应用程序并打印预定义的bean名称时,我会看到这些bean(我认为这对thymeleaf正常运行很重要): 模板引擎 thymeleafResourceResolver thymeleafViewResolver 项目结构如下所示: 我在fragments.html中定义了一