2016-05-07 6 views
1

В качестве альтернативы DonutCache кто-нибудь видит проблемы со следующим методом кэширования вывода. Похоже, что он работает без предоставления каких-либо пользовательских данных и кэширует страницу правильно для всех, основываясь на тестировании временных меток, что является моей самой большой проблемой. Я просто хочу покрыть свои базы, прежде чем внедрять их на своем сайте.MVC 5 Домашняя страница Выходной кеш на пользователя и анонимных гостей

В Glogal.asax.cs

public override string GetVaryByCustomString(HttpContext context, string arg) 
{ 
    if (arg == "User") 
    { 
     if (context.User.Identity.Name != "") 
     { 
      return "User=" + context.User.Identity.Name; 
     } 
     else 
     { 
      return "User=Guest"; 
     } 
    } 

    return base.GetVaryByCustomString(context, arg); 
} 

В Web.config

<caching> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="HomePage" duration="86400" varyByParam="*" varyByCustom="User" location="Server" /> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

* п Контроллер

[OutputCache(CacheProfile = "HomePage")] 
public ActionResult Index() 
{ 
    return View(); 
} 

Эталонный раствор: Output cache per User

ответ

0

Ваш подход полагается на имя пользователя (обычно отображаемое на свое имя), чтобы быть уникальным для всех пользователей, и что у фактического пользователя нет имени «Гость».

Лучшим подходом было бы сопоставить его с внутренним идентификатором приложения для этого пользователя.

if (arg == "User") 
{ 
    if (context.User.Identity.IsAuthenticated) 
    { 
     return $"User={context.User.Identity.GetUserId()}"; 
    } 
    else 
    { 
     return $"User={int.MinValue}"; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^