Making the Silverlight XAP file expire from browser cache programmatically

后端 未结 7 1010
自闭症患者
自闭症患者 2020-12-05 02:42

How to do I prevent a Silverlight XAP file being cached by the web browser?

The reason I want to do this is during development I don\'t want to manually clear the br

7条回答
  •  佛祖请我去吃肉
    2020-12-05 03:26

    Create a custom http handler for handling *.xap files and then set your caching options inside the handler.

    Something like this...

    using System;
    using System.IO;
    using System.Web;
    
    public class FileCacheHandler : IHttpHandler
    {
        public virtual void ProcessRequest(HttpContext context)
        {
            if (File.Exists(context.Request.PhysicalPath))
            {
                DateTime lastWriteTime = File.GetLastWriteTime(filePath);
                DateTime? modifiedSinceHeader = GetModifiedSinceHeader(context.Request);
    
                if (modifiedSinceHeader == null || lastWriteTime > modifiedSinceHeader)
                {
                    context.Response.AddFileDependency(filePath);
                    context.Response.Cache.SetLastModifiedFromFileDependencies();
                    context.Response.Cache.SetCacheability(HttpCacheability.Public);
                    context.Response.TransmitFile(filePath);
                    context.Response.StatusCode = 200;
                    context.Response.ContentType = "application/x-silverlight-app";
                    context.Response.OutputStream.Flush();
                }
                else
                {
                    context.Response.StatusCode = 304;
                }
            }
        }
    
        public DateTime? GetModifiedSinceHeader(HttpRequest request)
        {
            string modifiedSinceHeader = request.Headers["If-Modified-Since"];
            DateTime modifiedSince;
            if (string.IsNullOrEmpty(modifiedSinceHeader)
              || modifiedSinceHeader.Length == 0
              || !DateTime.TryParse(modifiedSinceHeader, out modifiedSince))
                return null;
    
            return modifiedSince;
        }
    }
    

提交回复
热议问题