缓存还是不缓存?以及如何在asp.net mvc中将其缓存在基本控制器上?
我正在制作自己的基本控制器,因为我想将一些数据传递到母版页。现在,由于这类似于将此代码添加到该控制器中的每个视图,所以每次都会运行它 当它第一次加载时,我认为它至少已经命中了我的代码两次。所以我想把它缓存起来。但在我的书中,它说不要缓存私有数据,因为每个人都会看到它 所以我不知道该怎么办 我的两行代码就是这样做的缓存还是不缓存?以及如何在asp.net mvc中将其缓存在基本控制器上?,.net,asp.net,asp.net-mvc,.net,Asp.net,Asp.net Mvc,我正在制作自己的基本控制器,因为我想将一些数据传递到母版页。现在,由于这类似于将此代码添加到该控制器中的每个视图,所以每次都会运行它 当它第一次加载时,我认为它至少已经命中了我的代码两次。所以我想把它缓存起来。但在我的书中,它说不要缓存私有数据,因为每个人都会看到它 所以我不知道该怎么办 我的两行代码就是这样做的 查找用户名并将其显示给用户 查找用户计划并显示该计划 所以我需要用户名来找出他们的GUID,这样我就可以找出他们注册的计划 所以我不知道如何缓存它,但不向所有人公开它。有没有办法让它只
控制器类的生命周期仅从操作请求延伸到视图呈现。你真的需要缓存这些数据吗?只需公开模型对象中的数据。查询听起来不够复杂,除此之外,大多数RDBMS供应商倾向于自己进行大量查询缓存 HTTP是一种无状态协议,这意味着在请求之后,web服务器会忘记关于该请求的所有内容。为了避免这种无状态,asp.net提供了应用程序和会话对象。应用程序对所有请求全局可用,会话绑定到单个IP。将任何数据放入缓存通常是最后的手段,或者是缓存真正具有重载时间的数据的方案的一部分 ASP.NET MVC中的流程大致相同
- 请求URL
- 控制器被称为
- 行动被称为
- 操作调用数据模型(用户名/用户计划)
- 操作设置viewmodel中的数据
- 操作使用viewmodel中的数据调用所需的视图
- 视图被渲染
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNS.BaseViewDataModel>" %>
以及您的HelpViewDataModel
namespace MyNS
{
public class BaseViewDataModel
namespace MyNS
{
public class HelpViewDataModel : BaseViewDataModel
{
然后在帮助控制器的适当操作中
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index()
{
var viewDataModel = new HelpViewDataModel ();
viewDataModel.HelpText = "something";
..
..
return View(viewDataModel);
}
现在,您可以在BaseViewDataModel的构造函数中实例化用户guid和用户计划,并且只会对实际实例化BaseViewDataModel子类的操作调用它
您的视图是类型安全的,这是巨大的生产力提升,因为我们输入了现在可以调用的视图
<%= this.Model.HelpText %>
在帮助视图中。回答是否应该缓存某个内容的最佳方法是确定它是否确实影响了站点的性能。与实际指标。别猜了。如果它没有伤害到任何东西,而且一切似乎都是有反应的,那么我会说,在需要的时候再做别的事情。“渗透优化是万恶之源”已经说过一两次了:) 如果你选择缓存数据,我不确定你说的每个人都可以看到它是什么意思?如果您指的是ASP.NET缓存框架(
HttpContext.Current.Cache
),那么它存在于您的服务器内存中,并且是完全不稳定的(如果内存压力击中它,它将在任何时候被清除)。因此,请务必记住这一点,并始终检查null。要使用它,只需使用Cache.Insert()
,它有几个重载来自定义缓存首选项
现在,如果您正在谈论使用浏览器cookies缓存某些内容,那就另当别论了。cookie确实存储在浏览器中,除非您为cookie指定HttpOnly,否则可以通过javascript读取cookie(只有当您在某处存在XSS漏洞时,这才是一个问题,因为恶意用户可以使用javascript“呼叫主页”用户的私有cookie数据。)因此,除非绝对必要,否则不要将任何私有内容放入cookie,如果确实需要,则应指定HttpOnly并采取适当步骤保护用户
如果安全性是您最关心的问题,那么您肯定应该阅读更多关于XSS和其他常见HTTP安全问题的内容。(
<%= this.Model.HelpText %>