gpt4 book ai didi

asp.net-mvc - WebAPI HttpContext 缓存 - 这可能吗?

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

我在常规 MVC Controller 中完成了以下操作:

public ActionResult GetCourses()
{
List<Course> courses = new List<Course>();

if (this.HttpContext.Cache["courses"] == null)
{
courses = _db.Courses.ToList();
this.HttpContext.Cache["courses"] = courses;
}
else
{
courses = (List<Course>)this.HttpContext.Cache["courses"];
}

return PartialView("_Courses", courses);
}

我缓存的原因是因为类(class)在两个地方加载 - 一个用于选择类(class)的模式,以及一个列出所有类(class)的索引 View 。模式只需要 JSON 来呈现(从 WebAPI 拉取数据),而索引 View 是 Razor 生成的 View (通过 MVC Controller 拉取)。

如果我已经有了类(class)数据,我会尝试不再查询数据库。

以上代码用于索引 View 。现在,对于模式,我只需要发送 JSON,但前提是类(class)尚未加载到索引 View 中。

我尝试从 API Controller 访问 HttpContext,但似乎无法以相同的方式访问它。 如何从 WebAPI Controller 检查 HttpContext.Cache,并在需要时填充它,以便 MVC Controller 可以检查其内容?

最佳答案

您可以像这样从 Web API Controller 设置缓存。

var context = HttpContext.Current;

if (context != null)
{
if (context.Cache["courses"] == null)
{
context.Cache["courses"] = _db.Courses.ToList();
}
}

为了简单起见,我在这里没有使用任何锁定。如果你的应用是高并发的,最好在设置缓存的时候实现锁。

此外,为了让 MVC 读取由 We API 设置的缓存,您的 Web API 和 MVC Controller 必须是同一应用程序的一部分。只是陈述显而易见的事实。

关于asp.net-mvc - WebAPI HttpContext 缓存 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906118/

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