asp.net-mvc – ASP.NET MVC:使浏览器缓存图像从动作
|
我有一个action方法返回一个文件,只有一个参数(一个id)。 例如 public ActionResult Icon(long id)
{
return File(Server.MapPath("~/Content/Images/image" + id + ".png"),"image/png");
}
我希望浏览器在第一次访问它时自动缓存此图像,所以下次不必下载所有数据。 我已经尝试使用像OutputCacheAttribute这样的东西,并在响应上手动设置标题。即: [OutputCache(Duration = 360000)] 要么 Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(Cache.NoAbsoluteExpiration); 但是,每当我在浏览器上点击F5时,图像仍然会被加载(我正在Chrome和IE上尝试)。 (我知道每次都加载,因为如果我更改图像,它也会在浏览器中更改)。 我看到HTTP响应有一些明显应该起作用的头文件: Cache-Control:public,max-age = 360000 但是请求头有这样的: Pragma:无缓存 任何想法如何做到这一点? 非常感谢 解决方法首先要注意的是,当您在Chrome,Safari或IE中点击F5(刷新)时,即使已在浏览器中缓存,也会再次请求图像。要告诉浏览器它不需要再次下载图像,您将需要返回一个没有内容的304响应,如下所示。 Response.StatusCode = 304;
Response.StatusDescription = "Not Modified";
Response.AddHeader("Content-Length","0");
在返回304响应之前,您需要检查If-Modified-Since请求头。因此,您需要根据图像资源的修改日期(无论是来自文件还是存储在数据库中),检查If-Modified-Since日期。如果文件没有改变,那么返回304,否则返回图像(资源)。 以下是实现此功能的一些很好的例子(这些对于HttpHandler而言,但是相同的原理可以应用于MVC操作方法) > Make your browser cache the output of a httphandler (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Form .NET中的输入元素名称
- 如何在ASP.NET MVC中使用通用处理程序(ASHX)?
- asp.net-mvc – 在MVC3中使用两个可选参数的路由不起作用
- asp.net – 选择下拉列表项目findbytext没有区分大小写vb.n
- asp.net-mvc – 使用DisplayAttribute和自定义资源提供程序
- asp.net-core – 是否可以直接在Azure WebApps中的Kestrel上
- asp.net – Web Api参数始终为null
- asp.net – 允许文本框中的HTML
- asp.net – CORS错误 – 请求的资源上没有“Access-Control
- asp.net – 引用相同主键的两个外键
- asp.net-mvc – 在MVC中修改密码4
- 为什么[System.ComponentModel.ToolboxItem(fals
- 在ASP.NET MVC中使用Razor创建可重用的HTML视图组
- 如何从asp.net中的客户端网络摄像头捕获图像
- asp.net-mvc – 在Visual Studio 2015中的ASP.NE
- ASP.NET Webforms的MVVM模式?
- asp.net – 如何通过使用eval应用特定FORMAT的日
- 如果没有授权,如何将用户重定向到ASP.NET页面?
- asp.net-mvc – 将变量与静态html连接起来的语法
- 文件上传 – 是否可以在上传文件的asp.net webap
