2017-02-09 2 views
0

J'ai peu de problème avec la mise en cache de mes vues. L'en-tête de l'emplacement n'est pas correct lorsque j'ai perdu mon ticket et que je me suis déconnecté, et j'ai essayé d'entrer directement dans l'url que j'étais avant.ASP .NET MVC OutputCache mauvais emplacement

Exemple: Je suis dans/Admin/Catégories, puis je suis déconnecté parce que je suis trop longtemps, donc je suis redirigé vers/Admin/Login. Après la connexion j'essaye d'aller à/Admin/Catégories et le cache m'envoie dans/Admin/Login au lieu de/Admin/Catégories.

Mon code:

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() est de retour vrai ou faux et cela fonctionne bien - ce n'est pas le problème.

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

partie web.config à l'intérieur:

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

Cache - Connexion (/ admin/Connexion)

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 - Catégories (/ admin/Catégories) - regardez en-tête de l'emplacement ce qui est faux ...

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 

Répondre

0

Ok, donc le problème était que l'emplacement OutputCache avec VaryByCustom utilisé en tant que paramètre doit être défini sur Serveur ou sur tout autre emplacement Serveur.

Par exemple:

Utilisation dans le contrôleur:

[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); 
    } 

Cette solution fonctionne ça va.