2010-05-11 40 views
4

我有一個網站,有一些主機標題。主題和數據取決於主機頭,不同的主機加載不同的網站。在ASP.NET中,是否可以通過主機名輸出緩存?即varybyhost或varbyhostheader?

因此,讓我們想象我有一個名爲「富」的網站,返回搜索結果。相同的代碼運行下面列出的兩個網站。這是相同的服務器和網站(使用主機頭)

  1. www.foo.com
  2. www.foo.com.au

現在,如果我去.com,該網站是在藍色的主題。如果我去了.com.au網站,它的主題是紅色。

根據主機名稱的不同,相同搜索結果的數據會有所不同:美國.com的結果和澳大利亞的結果.com.au

如果我想使用OutputCaching,可以通過主機名來處理和分區嗎?

我擔心,一個人去到.com現場後,(正確返回美國的結果),一個第二個人蔘觀.com.au網站和搜索相同的數據將獲得的.com網站的主題和結果。

緩存可能嗎?

+1

除了答案;我認爲'varyByHeader =「host」'應該就足夠了,而不需要自定義變化。 – bzlm 2016-01-16 22:38:09

+1

[ASP.NET MVC輸出緩存可用於多用戶應用程序,因主機名和文化而異](http://stackoverflow.com/questions/2012072/asp-net-mvc-output-cache-for-multinenant-application-不同的主機名和文化) – Michael 2017-05-03 20:08:57

回答

7

是的,你可以「改變自定義」。我使用的是相同的:

將在您的Global.asax.cs如下:

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if (custom == "Host") 
    { 
     return context.Request.Url.Host; 
    } 
    return String.Empty; 
} 

然後在你的控制器:

[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)] 
public ActionResult Index() 
{ 
    return View(); 
} 
+0

工作的很好。謝謝。 – jesperlind 2012-06-08 16:30:19

4

查看VaryByCustom參數OutputCache指令。

定義時會發生什麼VaryByCustom是被調用時,你需要重寫方法GetVaryByCustomString:

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    if(custom == "Your_Custom_Value") 
    { 
     // Do some validation. 
     // Return a string for say, .com, or .com.au 

    } 
    return String.Empty; 
} 

關鍵是你想緩存每個實例返回一個字符串值。在你的情況下,你的方法需要從URL中去掉「.com」或「.com.au」部分並返回。每個不同的值都會產生不同的緩存。

HTH

+0

夥計 - 這確實有幫助。如果有的話,我現在可以花一些時間研究這個。當我下一次得到一些時間時,我會在一週左右回覆一些答案。但嚴重 - 謝謝你的想法..這是非常非常有幫助的! – 2010-05-11 13:39:34

+0

很高興看到這有幫助。想想,您可能想使用HttpContext.Current.Request.Url.Host來確定用戶用來連接到您的網站的主機名。然後,您可以搜索該字符串中的子字符串'.com'或'.com.au'並返回它 - ASP.NET將完成剩下的工作。 – Richard 2010-05-12 07:49:03

+0

乾杯......我已經整理了主機名的東西(因爲我們的網站是通過主機名爲主題的)。我只需要一些時間來研發這種不同的定製......太多的工作...... – 2010-05-12 23:52:35

相關問題