如何缓存输出的action方法,返回图像到asp.net mvc中的视图?
发布时间:2020-12-15 19:40:26 所属栏目:asp.Net 来源:网络整理
导读:我已经阅读了很多关于缓存的帖子,但是没有一个真正符合我的需求.在我的mvc 3应用程序中,我有一个Get Image()方法返回一个图像类型的文件.然后我在这个视图中使用这种方法来显示图像: img width="75" height="75" src="@Url.Action("GetImage","Store",new {
我已经阅读了很多关于缓存的帖子,但是没有一个真正符合我的需求.在我的mvc 3应用程序中,我有一个Get
Image()方法返回一个图像类型的文件.然后我在这个视图中使用这种方法来显示图像:
<img width="75" height="75" src="@Url.Action("GetImage","Store",new {productId = item.ProductId})"/> 我想在服务器上缓存图像.所以,我已经尝试过: 1)使用OutputCacheAttribute: [HttpGet,OutputCache(Duration = 10,VaryByParam = "productId",Location = OutputCacheLocation.Server,NoStore = true)] public FileContentResult GetImage(int productId) { var p = _productRepository.GetProduct(productId); if (p != null) { if (System.IO.File.Exists(GetFullProductImagePath(productId))) { var image = Image.FromFile(GetFullProductImagePath(productId)); return File(GetFileContents(image),"image/jpeg"); } } var defaultPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["default-images-directory"]; var defaultImage = Image.FromFile(Path.Combine(defaultPath,"DefaultProductImage.jpg")); return File(GetFileContents(defaultImage),"image/jpeg"); } 图像没有缓存(我得到状态:200 OK) 2)在GetImage()方法中使用以下Response.Cache方法: public FileContentResult GetImage(int productId) { Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetMaxAge(new TimeSpan(0,10)); Response.Cache.SetExpires(DateTime.Now.Add(new TimeSpan(0,10))); Response.Cache.AppendCacheExtension("must-revalidate,proxy-revalidate"); // other code is the same } 图像不缓存 3)这里我得到:304未修改,但GetImage()方法返回任何东西(空图像) public FileContentResult GetImage(int productId) { Response.StatusCode = 304; Response.StatusDescription = "Not Modified"; Response.AddHeader("Content-Length","0"); // other code is the same } 问题:如何在服务器上缓存此操作方法的输出? 解决方法
尝试这样:
[HttpGet] [OutputCache( Duration = 10,Location = OutputCacheLocation.ServerAndClient)] public ActionResult GetImage(string productId) { ... } 注意事项:使用OutputCacheLocation.ServerAndClient并取消NoStore = true. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – aspx中的设计视图没有加载
- Asp.net MVC MiniProfiler“请求在此上下文中不可用”
- 是否可以在IIS中禁用ASP.NET网站睡眠?
- asp.net-mvc-3 – MVC3,Unity Framework和Per Session Life
- Azure Event Hub 技术研究系列3-Event Hub接收事件
- asp.net-mvc-3 – System.ComponentModel.DataAnnotations备
- asp.net – IIS返回找不到.mp4文件的404
- asp.net-mvc-3 – ReSharper无法解析Razor
- 下载 – 使用ASP.Net Webapi流式传输大图像
- asp.net – 为什么IIS线程这么珍贵与常规CLR线程相比?
推荐文章
站长推荐
热点阅读