【发布时间】:2017-07-16 10:33:48
【问题描述】:
我有一个同时具有 MVC 控制器和 WebApi 控制器的项目。我正在使用 System.Web.HttpContext.Current.Cache 来存储一些静态数据,因此不会针对每个请求从数据库中检索它。看起来 WebApi 控制器看不到 MVC 控制器缓存的数据。他们是否使用不同的 System.Web.HttpContext.Current.Cache 实例?
谢谢, 伯特·扬
【问题讨论】:
-
为了记录,您永远不应该直接在 MVC/Web API 中引用静态
System.Web.HttpContext.Current实例。您应该只使用传递给控制器/过滤器的包装HttpContextBase实例。不过,我不确定这是否能解决您的问题。 -
谢谢。我进行了一些测试,这个缓存在 WebApi 和 MVC 控制器中可用,它们可以看到彼此的缓存项。我误解了。感谢您指出包装好的 HttpContextBase。出于兴趣:引用静态实例有什么危险?
-
主要问题与引用任何静态方法时相同 - 紧耦合。例如,无法在单元测试中模拟静态
System.Web.HttpContext.Current实例,但您可以模拟HttpContextBase。更不用说,MVC 可能会改变一些通过包装器传递的值——如果你不引用它,你可能会在你的应用程序中引入一些细微的错误。
标签: .net asp.net-mvc caching asp.net-web-api