SORU
2 ŞUBAT 2010, Salı


tarayıcılar ASP.NET uygulamada en son js ve css dosyalarını almak için zorla

Bazı önbellek js ve css dosyaları, onları zorlamadığın sürece onları yenilemek için başarısız tarayıcılar. En kolay yolu nedir.

Ben sadece iş gibi görünüyor bu bir çözüm uygulanmıştır.

Bir sürüm sayfanızda değişken bildirin

  public string version { get; set; }

Sürüm numarasını web.yapılandırma anahtarı

 version = ConfigurationManager.AppSettings["versionNumber"];

Eğer SEO sayfa aramaları javascript ve stil sayfaları gibi

<script src="scripts/myjavascript.js?v=<%=version %>" type="text/javascript"></script>
<link href="styles/mystyle.css?v=<%=version %>" rel="stylesheet" type="text/css" />

Eğer öyleyse web 1.0 version = 1.1 ayarlayın.config tarayıcınızın umarım sizin ve kullanıcıları biraz hayal kırıklığı kurtaracak olan en son dosyaları indirin.

Daha iyi çalışır başka bir çözüm var mı, yoksa bu bir web sitesi için herhangi bir beklenmedik sorunlara neden olur?

CEVAP
29 Kasım 2011, Salı


Komut için bir sorgu parametresi olarak son değişiklik zaman damgası teyel ile bunu çözdüm.

Uzantısı yöntemi ile yaptım, ve benim CSHTML kullanarak dosyaları.Not:bu uygulama disk sessiz çok thrash değiliz yani 1 dakika zaman alır.

Burada uzatma yöntemi:

public static class JavascriptExtension {
    public static MvcHtmlString IncludeVersionedJs(this HtmlHelper helper, string filename) {
        string version = GetVersion(helper, filename);
        return MvcHtmlString.Create("<script type='text/javascript' src='"   filename   version   "'></script>");
    }

    private static string GetVersion(this HtmlHelper helper, string filename)
    {
        var context = helper.ViewContext.RequestContext.HttpContext;

        if (context.Cache[filename] == null) {
            var physicalPath = context.Server.MapPath(filename);
            var version = "?v="  
              new System.IO.FileInfo(physicalPath).LastWriteTime
                .ToString("yyyyMMddhhmmss");
            context.Cache.Add(physicalPath, version, null,
              DateTime.Now.AddMinutes(1), TimeSpan.Zero,
              CacheItemPriority.Normal, null);
            context.Cache[filename] = version;
            return version;
        }
        else {
            return context.Cache[filename] as string;
        }
    }
}

Ve sonra CSHTML sayfasında:

 @Html.IncludeVersionedJs("/MyJavascriptFile.js")

Oluşturulan HTML bu gibi görünür:

 <script type='text/javascript' src='/MyJavascriptFile.js?20111129120000'></script>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011