gpt4 book ai didi

c# - VaryByHeader 与子操作上的 OutputCacheAttribute

转载 作者:可可西里 更新时间:2023-11-01 08:43:04 25 4
gpt4 key购买 nike

借助 ASP.NET MVC 3 中的 [OutputCacheAttribute],您可以非常灵活地输出缓存。利用“VaryByHeader”属性按主机名进行存储桶缓存非常有用。例如:

[OutputCache(Duration = 60, VaryByHeader = "host")]
public ActionResult Foo()
{
return this.View();
}

但是,对于子操作,您不能应用“VaryByHeader”。框架抛出以下异常:

OutputCacheAttribute for child actions only supports Duration, VaryByCustom, and VaryByParam values. Please do not set CacheProfile, Location, NoStore, SqlDependency, VaryByContentEncoding, or VaryByHeader values for child actions.

我的问题是,为什么?

我们不能在子 Action 中使用 VaryByHeader 的原因是因为它会提供冲突的差异,因为父 Action 可能指定了不同的 VaryByHeader 值吗?

如果我想根据主机名以不同方式缓存子操作,这意味着什么,我将如何去做?

最佳答案

VaryByHeader 影响实际的 HTTP 响应 header ;所以你可能是正确的,MVC 团队阻止了这个以防止与父操作发生冲突。

要根据主机名缓存,你不能使用VaryByCustom吗?类似的东西(免责声明:根本没有尝试过):

[OutputCache(Duration = 60, VaryByCustom = "host")]
public ActionResult Foo()
{
return View();
}

后跟(在您的 Global.asax.cs 中)

public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "host")
{
return context.Request.Headers["host"];
}

// whatever you have already, or just String.Empty
return String.Empty;
}

关于c# - VaryByHeader 与子操作上的 OutputCacheAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9320304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com