如何将baseController对象Id设置为outputcache的键

时间:2016-12-25 07:45:59

标签: asp.net-mvc outputcache

 public class BaseController : Controller
    {
        // GET: Base
        public static UserManager.User _CurrentUser;
  }
}

此代码是我的BaseController的一部分,我想使用_CurrrentUser.Id作为outputcache的键。

[OutputCache(Duration = 1200, VaryByCustom = _CurrentUser.Id)]

当我尝试这样做时,它会说"属性中的参数必须是常数exprssion"并且它还需要设置为静态。

我可以将此属性设置为static,但是如何使其成为常量表达式,以便我可以将它用于outputcache。

1 个答案:

答案 0 :(得分:1)

我建议您从Auth获取CurrentUserId。曲奇饼。我这样用。

[Authorize]
public class BaseController : Controller
{
    private UserModel _currentUser;
    public UserModel CurrentUser => _currentUser ?? (_currentUser = GetCurrentUser());


    private UserModel GetCurrentUser()
    {
        UserModel currentUser;
        if (!User.Identity.IsAuthenticated) return null;
        try
        {
            var userDataFromCookie = CookieHelper.GetCookie(FormsAuthentication.FormsCookieName);

            if (string.IsNullOrWhiteSpace(userDataFromCookie))
                throw new ArgumentException("Authentication cookie is null");

            currentUser = JsonHelper.Deserialize<UserModel>(FormsAuthentication.Decrypt(userDataFromCookie)?.UserData);
        }
        catch (Exception)
        {

            throw;
        }


        return currentUser;
    }
}

Cookie Helper方法

  public static string GetCookie(string key)
    {
        return HttpContext.Current.Request.Cookies[key] != null ? HttpContext.Current.Request.Cookies[key].Value : null;
    }