/// <summary> /// 将文件内容输出到客户端客户端浏览器,支持http头操作。 /// </summary> /// <param name="request"></param> /// <param name="response"></param> /// <param name="fileContent">要往客户端浏览器输出的文本内容</param> /// <param name="isHttpHead">True表示使用http头操作,False表示不使用http头操作</param> internal static void Output(HttpRequest request, HttpResponse response, string fileContent, string absoluteFilePath, bool isHttpHead) { if (string.IsNullOrWhiteSpace(fileContent)) { return; } //wangyunpeng 增加http头,把生成的路径输出出来,方便修改页面使用。 if (absoluteFilePath != null) { response.AddHeader("X-Page-Hash", absoluteFilePath); } HttpCachePolicy cache = response.Cache; cache.SetOmitVaryStar(true);//http://www.cnblogs.com/dudu/archive/2011/11/03/outputcache_Bug_vary.html //#if DEBUG //本地调试不使用浏览器缓存 //cache.SetCacheability(HttpCacheability.NoCache); //cache.SetExpires(DateTime.UtcNow.AddYears(-1)); //cache.SetMaxAge(TimeSpan.Zero); //cache.SetProxyMaxAge(TimeSpan.Zero); //cache.SetNoServerCaching(); //cache.SetNoStore(); //cache.SetNoTransforms(); //#else string ifModifiedSince = request.Headers["If-Modified-Since"]; if (isHttpHead) { if ( !string.IsNullOrWhiteSpace(ifModifiedSince) && TimeSpan.FromTicks(DateTime.Now.Ticks - TypeParseHelper.StrToDateTime(ifModifiedSince).Ticks).Minutes < CACHE_DATETIME) { response.StatusCode = (int)System.Net.HttpStatusCode.NotModified; response.StatusDescription = "Not Modified"; response.End(); return; } else { cache.SetLastModifiedFromFileDependencies(); cache.SetETagFromFileDependencies(); cache.SetCacheability(HttpCacheability.Public); cache.SetExpires(DateTime.UtcNow.AddMinutes(CACHE_DATETIME)); TimeSpan timeSpan = TimeSpan.FromMinutes(CACHE_DATETIME); cache.SetMaxAge(timeSpan); cache.SetProxyMaxAge(timeSpan); cache.SetLastModified(DateTime.Now); cache.SetValidUntilExpires(true); cache.SetSlidingExpiration(true); } } //#endif System.Text.Encoding encoding = IOHelper.GetHtmEncoding(fileContent) ?? NVelocityBus._GlobalizationSection.ResponseEncoding; response.ContentEncoding = encoding; response.ContentType = response.ContentType; response.Write(fileContent); //压缩页面 if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] == null) { if (NVelocityBus.IsAcceptEncoding(request, GZIP)) { response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); NVelocityBus.SetResponseEncoding(response, GZIP); } else if (NVelocityBus.IsAcceptEncoding(request, DEFLATE)) { response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); NVelocityBus.SetResponseEncoding(response, DEFLATE); } } //强制结束输出 response.End(); }