asp.net-mvc – 如何在ASP.NET MVC中为经过身份验证的用户关闭输出缓存?
发布时间:2020-05-28 06:24:37 所属栏目:asp.Net 来源:互联网
导读:我有一个ASP.NET MVC应用程序.我需要缓存一些页面,但只对非验证用户. 我试图使用VaryByCustom =“user”与以下GetVaryByCustomString实现: public override string GetVaryByCustomString(HttpContext context, string custom){ if (custom == user)
|
我有一个ASP.NET MVC应用程序.我需要缓存一些页面,但只对非验证用户. 我试图使用VaryByCustom =“user”与以下GetVaryByCustomString实现: public override string GetVaryByCustomString(HttpContext context,string custom)
{
if (custom == "user")
{
if (context.User.Identity.IsAuthenticated)
{
return context.User.Identity.Name;
}
else
{
return "";
}
}
return base.GetVaryByCustomString(context,custom);
}
然而,这并不是我所需要的,因为网页仍然被缓存.只有不同的是,现在是为每个用户单独缓存. 一个可能的解决方案是每当用户被认证时返回Guid.NewGuid(),但是对我来说看起来像是浪费大量资源. 那么你有什么技巧给我吗? 解决方法所以这里是我做的:public class NonAuthenticatedOnlyCacheAttribute : OutputCacheAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var httpContext = filterContext.HttpContext;
if (httpContext.User.Identity.IsAuthenticated)
{
// it's crucial not to cache Authenticated content
Location = OutputCacheLocation.None;
}
// this smells a little but it works
httpContext.Response.Cache.AddValidationCallback(IgnoreAuthenticated,null);
base.OnResultExecuting(filterContext);
}
// This method is called each time when cached page is going to be
// served and ensures that cache is ignored for authenticated users.
private void IgnoreAuthenticated(HttpContext context,object data,ref HttpValidationStatus validationStatus)
{
if (context.User.Identity.IsAuthenticated)
validationStatus = HttpValidationStatus.IgnoreThisRequest;
else
validationStatus = HttpValidationStatus.Valid;
}
}
非常感谢Craig Stuntz谁指出我正确的方向,他的回答我不知不觉中被低估了. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 是否可以在Visual Studio 2013中使用asp.ne
- asp.net – 我无法在我的visual studio 2012(express editi
- asp.net mvc – 如何实现面包屑助手在asp.net mvc?
- asp.net-mvc – 如何在MVC3中的局部视图中渲染节?
- 在asp.net mvc中的RedirectToAction用法
- asp.net-mvc – 添加ELMAH并更改elmah.mvc.route后,旧路由仍
- asp.net-mvc – ASP.NET MVC 4覆盖发出的html名称和id
- 长时间运行的任务 – 最佳实践 – ASP.NET 4.0,C#
- .net – 我应该在HttpCookie.Expires和HttpCachePolicy.Set
- 发布一款层次下拉列表控件
推荐文章
站长推荐
- 有没有任何好的ASP.NET MVC2或MVC3作弊表?
- asp.net-mvc – 在MVC中检查图像mime,大小等
- asp.net-mvc – asp.net mvc 3 – ajax表单提交和
- asp.net-mvc – 在ASP.NET MVC中创建模型
- asp.net-mvc – Asp.Net MVC中的JQuery UI datep
- entity-framework – DbContext未在ASP.Net MVC中
- asp.net-mvc-4 – ASP.NET Active Directory搜索
- asp.net-mvc – 如何从FilterAttribute中获取当前
- asp.net – 为什么即使我将EnableViewState设置为
- 单元测试 – 有没有办法单元测试在视图中设置的A
热点阅读
