2015-11-20 127 views
3

這是以前通過在web.config文件中添加一些配置來實現的,但是現在這個文件將被消除。如何使用ASP.NET 5和MVC 6緩存靜態內容?

我希望找到的中間件聲明一些方法或屬性,但我還沒有發現:

app.UseStaticFiles(); 

所以,這是現在的程序緩存的靜態內容,圖片,腳本等。 ?

是否有另一箇中間件可以做到這一點,或者這個特性還沒有在MVC 6中實現?

我正在尋找一種方法將緩存控制,過期等頭添加到靜態內容。

+0

請仔細閱讀以下問題:如何緩存靜態內容......如果您正在作爲管理員進行修改,在將問題標記爲僞裝之前,你會閱讀所有其他答案和評論。 – Vi100

回答

3

這是關於使用AspNet Core的中間件;

以下添加到在Startup.cs你的配置方法文件

app.Use(async (context, next) => 
      { 
       context.Response.Headers.Add("Content-encoding", "gzip"); 
       context.Response.Body = new System.IO.Compression.GZipStream(context.Response.Body, 
        System.IO.Compression.CompressionMode.Compress); 
       await next(); 
       await context.Response.Body.FlushAsync(); 
      }); 

順便說來緩存你這個添加到ConfigureServices方法

services.AddMvc(options => 
      { 
       options.CacheProfiles.Add("Default", 
        new CacheProfile() 
        { 
         Duration = 60 
        }); 
       options.CacheProfiles.Add("Never", 
        new CacheProfile() 
        { 
         Location = ResponseCacheLocation.None, 
         NoStore = true 
        }); 
      }); 

和裝飾用

控制
[ResponseCache(CacheProfileName = "Default")] 
    public class HomeController : Controller 
    { 
... 
+0

默認使用「默認」配置文件嗎? 如何設置默認配置文件? – hex

0

你的標題說壓縮,但你的問題身體說緩存。我會假設你的意思是兩者。

css/javascript的縮小已經由發佈時的grunt任務運行者處理。除此之外的緩存和壓縮看起來像一個web服務器更適合,而不是應用程序層,所以這裏有一個偉大的article詳細說明了nginx的配置來管理kestrel的緩存和壓縮。

如果您使用IIS,則可以直接在其上配置緩存和壓縮,這裏是tutorial。考慮到以前版本的MVC在web.config\system.Webserver中配置了基本上設置IIS配置值的功能,您可能仍然可以使用web.config來配置IIS(僅)。

+0

感謝您的提示,我已經糾正了這個問題,我的意思是緩存。我已經在使用grunt進行縮小,所以我在尋找的是將緩存控制,expires等標題添加到靜態內容的方法。我認爲這應該是一個框架的功能,至少現在應用程序是從服務器上以獨立的方式銷售的。當然,我使用Kestrel是因爲它是強加的方式,並且我知道如何以傳統方式配置IIS,但我不想再考慮每個Web服務器的特性,當然我也不會開始現在學習nginx。 – Vi100

+0

哎呀,我的意思是咕嚕:)你見過[this](http://stackoverflow.com/q/29256244/469777)? –

+0

嗯。你連接的問題是8個月和4個測試版本。我們對此還有同樣的觀點嗎?我無法相信。答案中的workarrounds是可怕的... ASP.NET 5現在在Release Candidate上,具有封閉的功能,我希望他們已經實現了任何優雅的方式來設置這個標頭並覆蓋服務器配置,這些都是關於ASP.NET的,或者我錯過了一些東西。 – Vi100

相關問題