gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 输出缓存属性 : do not cache if a parameter is set?

转载 作者:行者123 更新时间:2023-12-02 13:50:20 24 4
gpt4 key购买 nike

我有以下操作:

public class HomeController : Controller
{
public ActionResult Index(int? id) { /* ... */ }
}

我想要[OutputCache]该操作,但我也想要这样:

  • 如果id == null,则不使用缓存;或
  • 如果 id == null,则使用缓存,但持续时间不同。

我认为我可以通过以下方式实现这一目标:

public class HomeController : Controller
{
[OutputCache(VaryByParam = "none", Duration = 3600)]
public ActionResult Index() { /* ... */ }

[OutputCache(VaryByParam = "id", Duration = 60)]
public ActionResult Index(int id) { /* ... */ }
}

但是,当 id 实际上是可选的时,此解决方案意味着 2 个操作,因此这可能会产生一些代码重复。当然我可以做类似的事情

public class HomeController : Controller
{
[OutputCache(VaryByParam = "none", Duration = 3600)]
public ActionResult Index() { return IndexHelper(null); }

[OutputCache(VaryByParam = "id", Duration = 60)]
public ActionResult Index(int id) { return IndexHelper(id); }

private ActionResult IndexHelper(int? id) { /* ... */ }
}

但这看起来很丑。

你会如何实现这个?

最佳答案

我认为你所拥有的可能是最干净的选择。

另一个选项(我尚未测试过)可能是设置 VaryByCustom 参数并覆盖 Global.asax 中的 GetVaryByCustomString。

public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg.ToLower() == “id”)
{
// Extract and return value of id from query string, if present.
}

return base.GetVaryByCustomString(context, arg);
}

请参阅此处了解更多信息:http://codebetter.com/blogs/darrell.norton/archive/2004/05/04/12724.aspx

关于asp.net-mvc - ASP.NET MVC 输出缓存属性 : do not cache if a parameter is set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012756/

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