加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在ASP.NET MVC中为经过身份验证的用户关闭输

发布时间:2020-12-15 23:39:36 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET MVC应用程序.我需要缓存一些页面,但只对非验证用户. 我试图使用VaryByCustom =“user”与以下GetVaryByCustomString实现: public override string GetVaryByCustomString(HttpContext context,string custom){ if (custom == "user") { if
我有一个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谁指出我正确的方向,他的回答我不知不觉中被低估了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读