2017-02-09 23 views
0

У меня мало проблем с кешированием моих просмотров. Неправильный заголовок местоположения, когда я потерял билет и выхожу из системы, и пытаюсь получить прямо в URL-адрес, который был раньше.ASP.NET MVC OutputCache неправильное расположение

Пример: Я нахожусь внутри/Admin/Категории, после чего я выхожу из системы из-за того, что я слишком длинный, поэтому я перенаправлен в/Admin/Login. После входа в систему я пытаюсь перейти в/Admin/Categories и кеш отправляет меня в/Admin/Login вместо/Admin/Categories.

Мой код:

LOGIN CONTROLLER 
    [OutputCache(CacheProfile = "OneDayCache", VaryByParam = "None", VaryByCustom = "url")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    CATEGORIES CONTROLLER 
    [OutputCache(CacheProfile = "OneDayCache", VaryByParam = "None", VaryByCustom = "url")] 
    public ActionResult Index() 
    { 
     if (validations.ValidateTicket()) 
     { 
      return View(); 
     } 
     else 
     { 
      return RedirectToAction("Index", "Login"); 
     } 
    } 

validations.ValidateTicket() возвращает истинным или ложным, и это работает хорошо - это не проблема.

GLOBAL.ASAX.CS 
    public override string GetVaryByCustomString(HttpContext context, string arg) 
    { 
     if (arg == "url") 
     { 
      return context.Request.RawUrl; 
     } 
     return base.GetVaryByCustomString(context, arg); 
    } 

Web.config часть внутри:

<caching> 
    <outputCache enableOutputCache="true" omitVaryStar="true"></outputCache> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="OneDayCache" duration="86400" location="Client" /> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

Cache - Вход (/ администратора/Login)

HTTP/1.1 200 OK 
Cache-Control: private, max-age=86400 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Expires: Fri, 10 Feb 2017 20:35:45 GMT 
Last-Modified: Thu, 09 Feb 2017 20:35:45 GMT 
Vary: Accept-Encoding 
Server: Microsoft-IIS/10.0 
X-AspNetMvc-Version: 5.2 
X-Frame-Options: SAMEORIGIN 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?TTpcUHJvamVrdHlcQU1CSVQtQ01TLU1WQ1xBTUJJVCBDTVMgTVZDXEFkbWluXExvZ2lu?= 
X-Powered-By: ASP.NET 
Date: Thu, 09 Feb 2017 20:35:45 GMT 
Content-Length: 1113 

Cache - Категории (/ Администратор/Категории) - посмотрите на заголовок местоположения что является неправильным ...

HTTP/1.1 302 Found 
Cache-Control: private, max-age=86400 
Content-Type: text/html; charset=utf-8 
Expires: Fri, 10 Feb 2017 20:35:39 GMT 
Last-Modified: Thu, 09 Feb 2017 20:35:39 GMT 
Location: /Admin/Login 
Server: Microsoft-IIS/10.0 
X-AspNetMvc-Version: 5.2 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?TTpcUHJvamVrdHlcQU1CSVQtQ01TLU1WQ1xBTUJJVCBDTVMgTVZDXEFkbWluXENhdGVnb3JpZXM=?= 
X-Powered-By: ASP.NET 
Date: Thu, 09 Feb 2017 20:35:39 GMT 
Content-Length: 439 

ответ

0

Хорошо, так проблема заключалась в том, что местоположение OutputCache с параметром VaryByCustom, используемым как параметр, должно быть настроено на Server или любое другое, используя расположение сервера.

Например:

Использование в контроллере:

[OutputCache(CacheProfile = "ControllerIndexCache")] 

Web.config:

<caching> 
    <outputCache enableOutputCache="true" omitVaryStar="true"></outputCache> 
    <outputCacheSettings> 
    <outputCacheProfiles> 
     <add name="ControllerIndexCache" duration="10" location="Server" varyByCustom="Url" varyByParam="None" /> 
    </outputCacheProfiles> 
    </outputCacheSettings> 
</caching> 

Global.asax.cs:

public override string GetVaryByCustomString(HttpContext context, string arg) 
    { 
     if (arg == "Url") 
     { 
      return context.Request.Url.AbsoluteUri; 
     } 
     return base.GetVaryByCustomString(context, arg); 
    } 

Это решение работает просто хорошо.