2016-12-25 2 views
0
public class BaseController : Controller 
    { 
     // GET: Base 
     public static UserManager.User _CurrentUser; 
    } 
} 

Этот код является частью моей BaseController, и я хочу использовать _CurrrentUser.Id в качестве ключа для OutputCache.Как установить baseController идентификатор объекта в качестве ключа для OutputCache

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

Когда я попытался сделать это, говорят «Аргумент в атрибуте должен быть постоянным exprssion», и это также необходимо задать статический.

Я могу сделать это свойство статическим, но как я могу сделать это постоянным выражением, поэтому я могу использовать его для outputcache.

+0

Показать метод действия кода декларации – Rajput

ответ

1

Я рекомендую вам получить CurrentUserId от Auth. Cookie. Я так использую.

[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; 
    } 
Смежные вопросы