OutputCache.VaryByHeader не генерирует заголовок Vary в ответе

У меня есть этот метод действия:

    [OutputCache(Duration = 2, 
                 Location = OutputCacheLocation.Any, 
                 VaryByHeader = "Accept-Charset")]
    public ActionResult Index()
    {
        return View();
    }

И сгенерированный ответ:

Cache-Control:public, max-age=2
Content-Length:5164
Content-Type:text/html; charset=utf-8
Date:Wed, 28 Sep 2011 16:30:33 GMT
Expires:Wed, 28 Sep 2011 16:30:35 GMT
Last-Modified:Wed, 28 Sep 2011 16:30:33 GMT
Server:Microsoft-IIS/7.5
Vary:*
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET

Почему в заголовке Vary отображается звездочка вместо Accept-Charset ?

OutputCacheAttribute действительно влияет на ответ, на самом деле заголовки Expires и Cache-Control: max-age = n зависят от Duration , а аргумент Cache-Control: public / private / no-cache зависит от аргумента Location .

Я создал оболочку для OutputCacheAttribute , чтобы увидеть, что происходит:

public class CustomOutputCacheAttribute:OutputCacheAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);

        Dictionary<String, String> headers = new Dictionary<string, string>();
        foreach (var header in filterContext.HttpContext.Response.Headers.AllKeys)
            headers.Add(header, filterContext.HttpContext.Response.Headers[header]);

        Debugger.Break();
    }
} 

Заголовки не отображаются в перерыве, поэтому, вероятно, OutputCacheAttribute настраивает ] HttpContext.Current.Response.Cache .

Я вижу, что filterContext.HttpContext.Response.Cache.VaryByHeaders.UserCharSet имеет значение true , и, например, filterContext.HttpContext.Response.Cacheecept.Vary равно false , но в заголовке Vary всегда указано * .

Мне интересно, могут ли быть единственными возможными значениями четыре значения, перечисленные как свойства filterContext.HttpContext.Response.Cache.VaryByHeaders ?

Ура.

5
задан vtortola 29 September 2011 в 11:06
поделиться