我知道它缓存了我页面中的所有数据......但是在我的页面中我有这样的情况: -6ren">
gpt4 book ai didi

c# - ASP.NET 中缓存的 Request.IsAuthenticated 问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:22:46 24 4
gpt4 key购买 nike

我是 ASP.NET 的新手,我有一个问题...

当我想缓存 I View 或像这样的 Action 时:

<%@ Page title="" language="C#" masterpagefile="~/Views/Shared/MemberHome.Master" inherits="System.Web.Mvc.ViewPage<IndexViewData>" %>
<%@ OutputCache duration="400" varybyparam="divId;regionId;page" %>

我知道它缓存了我页面中的所有数据......但是在我的页面中我有这样的情况:

 <% if(Request.IsAuthenticated) { %>
<a href="/fr/Advertiser/Search"><img src="/content/images/v_2/bot.jpg" alt="Entreprises liées à vos passions" title="Entreprises liées à vos passions" /></a>
<% } else { %>
<a href="/fr/Advertiser/OpenSearch"><img src="/content/images/v_2/bot.jpg" alt="Entreprises liées à vos passions" title="Entreprises liées à vos passions" /></a>
<% } %>

我不想缓存这个变量:Request.IsAuthenticated ...因为一些结果取决于这个条件...我尝试了 scottgu 的 donut 缓存但它返回(我认为)只是一些文本而不是 bool ... http://weblogs.asp.net/scottgu/archive/2006/11/28/tip-trick-implement-donut-caching-with-the-asp-net-2-0-output-cache-substitution-feature.aspx

现在我已经厌倦了尝试任何想到的事情..你能帮我吗? :)

朱利安。

最佳答案

首先,在 MVC 应用程序中,不要使用 <%@ OutputCache %> View 上的指令。缓存应该在 Controller 级别完成,而不是在 View 级别。使用 [OutputCache]属性而不是 <%@ OutputCache %> .参见 http://www.asp.net/learn/mvc/tutorial-15-cs.aspx有关如何执行此操作的示例。

您可以设置 OutputCacheAttribute.VaryByCustom属性设置为某个自定义值,并通过覆盖 GetVaryByCustomString 从 Global.asax 检查它方法。

Steven Smith 有一个这样的例子 on his blog .请注意,他的示例针对 WebForms 而不是 MVC,因此您需要使用 [OutputCache]而不是 <%@ OutputCache %> ,但总体思路是一样的。您可能希望返回“已验证”或“未验证”,因为这就是您需要的所有粒度;您似乎不需要实际登录的用户名。 (无论如何,每个用户的输出缓存通常不是一个好主意,因为如果许多用户登录,您将很快填满缓存。)

特别注意,不要在 MVC 应用程序中使用 Response.WriteSubstitution()。 Response.WriteSubstitution() 是特定于 WebForms 的扩展点,它在 MVC 应用程序中的行为是未定义的,因为 MVC 不运行整个 WebForms 管道。不能保证它会正常工作。

关于c# - ASP.NET 中缓存的 Request.IsAuthenticated 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526509/

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