asp.net-mvc – 为FileResult设置ETag – MVC 3
发布时间:2020-12-16 04:34:28 所属栏目:asp.Net 来源:网络整理
导读:MVC 3 RTM.我有一个返回文件的动作(image / jpeg).我试图为一个文件设置ETag没有成功(etag没有通过标题).我已经尝试了Response.Cache.SetETag和Response.AppenderHeader.如果我添加自己的自定义标头标签,它按预期工作,它似乎是我无法设置的ETag. 这是来源. [
MVC 3 RTM.我有一个返回文件的动作(image / jpeg).我试图为一个文件设置ETag没有成功(etag没有通过标题).我已经尝试了Response.Cache.SetETag和Response.AppenderHeader.如果我添加自己的自定义标头标签,它按预期工作,它似乎是我无法设置的ETag.
这是来源. [HttpGet,OutputCache(Location= OutputCacheLocation.Client,VaryByParam="userId",Duration=3600,NoStore=true)] public ActionResult GetImage(string userId) { byte[] result; using (var client = new WebClient()) { client.Credentials = CredentialCache.DefaultCredentials; result = client.DownloadData(string.Format(IntranetUrl,userId)); } Response.Cache.SetETag("00amyWGct0y_ze4lIsj2Mw"); //or Response.AppendHeader("ETag","00amyWGct0y_ze4lIsj2Mw"); Response.AppendHeader("MyHeader","HelloWorld"); return File(result,"image/jpeg"); } 这是资源请求/响应: > Request > URL:http://localhost/MyApp/Employee.mvc/GetImage?userId=myUserId > Request Method:GET Status Code:200 OK > Request Headers Accept:*/* > Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 > Accept-Encoding:gzip,deflate,sdch > Accept-Language:en-US,en;q=0.8 > Cache-Control:max-age=0 > Connection:keep-alive > Cookie:ASP.NET_SessionId=mySessionId > Host:localhost > Referer:http://localhost/MyApp/Employee/Review/24/Index > User-Agent:Mozilla/5.0 (Windows; U; > Windows NT 5.1; en-US) > AppleWebKit/534.13 (KHTML,like Gecko) > Chrome/9.0.597.98 Safari/534.13 Query > String Parameters userId:myUserId > Response Headers > Cache-Control:private,no-store,> max-age=3600 Content-Length:1428 > Content-Type:image/jpeg Date:Thu,17 > Feb 2011 15:45:30 GMT Expires:Thu,17 > Feb 2011 16:45:29 GMT > Last-Modified:Thu,17 Feb 2011 > 15:45:29 GMT MyHeader:HelloWorld > Server:Microsoft-IIS/5.1 > X-AspNet-Version:4.0.30319 > X-AspNetMvc-Version:3.0 > X-Powered-By:ASP.NET 更新 我把所有的代码都删除了,但仍然没有… 行动: public FileETagActionResult GetImage() { return new FileETagActionResult(); } 的ActionResult: public class FileETagActionResult : ActionResult { public override void ExecuteResult(ControllerContext context) { byte[] result; using (var client = new WebClient()) { result = client.DownloadData("http://myintranet/images/logo.png"); } var hash = MD5.Create().ComputeHash(result); string etag = String.Format(""{0}"",Convert.ToBase64String(hash)); TimeSpan expireTs = TimeSpan.FromDays(5); context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.Private); context.HttpContext.Response.Cache.SetETag(etag); context.HttpContext.Response.Cache.SetExpires(DateTime.Now.AddDays(5)); context.HttpContext.Response.Cache.SetMaxAge(expireTs); context.HttpContext.Response.ContentType = "image/png"; context.HttpContext.Response.BinaryWrite(result); } } 解决方法
如果您使用HttpCacheability.Private,将禁止ETag.
您可以在此找到有关此question的更多信息 如果你把它改成HttpCacheability.ServerAndPrivate它应该工作 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 防止将父web.config继承到IIS 7.5上的子应用程序
- 在IIS 8上发布asp vnext网站的问题
- asp.net – 如何编辑web.config以停止提供.NET Web应用程序
- asp.net-mvc-4 – MVC脚手架 – 实现分页的快捷方式?
- asp.net – 如何获取SignalR用户连接ID在外线中心类?
- C#_.NetCore_WebAPI项目_EXCEL数据导出(ExcelHelper_第二版
- asp.net-mvc – ASP.NET MVC – 从视图部分更新模型
- asp.net-mvc – 在Webgrid中将布尔值显示为复选框
- asp.net-mvc-3 – 依赖注入与多个类实现的接口
- 如何使用APDU将PIN验证代码发送到智能卡 – 使用.NET
推荐文章
站长推荐
热点阅读