asp.net-mvc – 如何在ASP.NET MVC RC1中返回304状态与FileResul
发布时间:2020-12-15 23:18:18 所属栏目:asp.Net 来源:网络整理
导读:你可能知道我们在RC1版本的ASP.NET MVC中有一个名为FileResult的新的ActionResult. 使用它,您的操作方法可以动态地将图像返回到浏览器.这样的事情 public ActionResult DisplayPhoto(int id){ Photo photo = GetPhotoFromDatabase(id); return File(photo.Co
你可能知道我们在RC1版本的ASP.NET MVC中有一个名为FileResult的新的ActionResult.
使用它,您的操作方法可以动态地将图像返回到浏览器.这样的事情 public ActionResult DisplayPhoto(int id) { Photo photo = GetPhotoFromDatabase(id); return File(photo.Content,photo.ContentType); } 在HTML代码中,我们可以使用这样的东西: <img src="http://mysite.com/controller/DisplayPhoto/657"> 由于图像是动态返回的,所以我们需要一种方法来缓存返回的流,以便我们不需要再次从数据库中读取图像.我想我们可以这样做,我不知道: Response.StatusCode = 304; 这告诉浏览器您已经在缓存中拥有图像.将StatusCode设置为304后,我只是不知道在我的操作方法中返回的内容.应该返回null还是什么? 解决方法
这个博客回答了我的问题;
http://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx
基本上,您需要读取请求头,比较最后修改的日期并返回304,否则返回图像(具有200状态),并适当地设置缓存头. 博客的代码段: public ActionResult Image(int id) { var image = _imageRepository.Get(id); if (image == null) throw new HttpException(404,"Image not found"); if (!String.IsNullOrEmpty(Request.Headers["If-Modified-Since"])) { CultureInfo provider = CultureInfo.InvariantCulture; var lastMod = DateTime.ParseExact(Request.Headers["If-Modified-Since"],"r",provider).ToLocalTime(); if (lastMod == image.TimeStamp.AddMilliseconds(-image.TimeStamp.Millisecond)) { Response.StatusCode = 304; Response.StatusDescription = "Not Modified"; return Content(String.Empty); } } var stream = new MemoryStream(image.GetImage()); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetLastModified(image.TimeStamp); return File(stream,image.MimeType); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-web-api – 将JSON数组从Javascript传递到Web API
- asp.net-mvc-4 – MVC4自定义OnActionExecuting Global.asx
- asp.net – 即使我在Windows 8中安装了协议,SignalR也不会使
- asp.net – 从Web服务返回XElement
- asp.net-mvc-3 – Editor用于收集我的模型中的项目
- ASP.NET Kendo UI上传
- asp.net – 浏览器缓存(.js文件)存在多长时间
- Windbg程序调试系列4-Live Debugging
- asp.net – 如何访问listview中的按钮?特别是使用button_c
- asp.net-mvc – 用于ASP.NET MVC 3的NuGet软件包
推荐文章
站长推荐
- asp.net中的ASHX处理程序文件的好处是什么?
- asp.net – Corp IT Systems的方向.投资A还是B?
- asp.net-mvc – ApplicationDbContext – 它在项
- .NET Core技术研究-HttpContext访问的正确姿势
- asp.net – 无法从HRESULT加载文件或程序集异常:
- ASP.NET MVC的Razor引擎:IoC在View激活过程中的
- IIS7不会显示ASP.Net错误消息或堆栈跟踪
- asp-classic – ASP中的Access-Control-Allow-Or
- ASP.NET Web窗体是否阻止双击提交?
- asp.net-mvc – Sitecore 6.6,MVC 3和System.Web
热点阅读