Ma mise en cache de sortie ne semble pas fonctionner comme prévu Il s'agit d'une méthode de contrôleur pour retourner la page par défaut pour mon site Web. Je l'ai mis en cache pour 40secs (test -> en direct, il est mis en mémoire cache beaucoup plus longtemps)OutputCache ne fonctionne pas correctement -> ASP.NET MVC5
[OutputCache(Duration = 40, Location = OutputCacheLocation.ServerAndClient, VaryByParam = "none")]
public async Task<ActionResult> Index(){
......
}
J'ai 2 problèmes
Première
Quand je frappe le point final pour la première temps il est mis en cache correctement sur le serveur et renvoie l'en-tête de réponse suivant (comme prévu) entre autres.
status:200
Cache-Control:"private, max-age=40, s-maxage=0"
Lorsque j'ouvre un nouvel onglet du navigateur et que je colle le même point final après 5 secondes. il va au serveur et renvoie un 200 avec le contenu et l'en-tête suivant
status:200
Cache-Control:"private, max-age=63622944145, s-maxage=63622944105"
Cela ne me semble pas correct. Je m'attendais à envoyer une requête au serveur avec l'en-tête If-modified-since. Si la réponse mise en cache était reconstruite depuis le temps dans l'en-tête, alors elle retournerait un contenu de 200 + sinon un 304. Donc dans ce cas, le cache du serveur n'étant pas reconstruit, il devrait renvoyer un 304. Aussi, l'âge maximum est si grand il est maintenant invalide et est donc immédiatement considéré comme périmé. Alors qu'est-ce que je fais de mal ...?
En second lieu
Je mis un point d'arrêt dans ma méthode d'index et cliquez sur le point final de mon navigateur. La première fois que j'atteins l'extrémité de l'index, le point d'arrêt est atteint. Les demandes suivantes au point de terminaison n'atteignent pas le point d'arrêt pendant les 40 secondes suivantes comme prévu. Toutefois, si j'ajoute un "/" à la fin de mon point de terminaison dans le navigateur, il va frapper le point d'arrêt en ignorant le cache. Comment éviter cela ..?
En ce qui concerne la deuxième partie de votre question, l'URL 'http://www.example.com' et 'http://www.example.com/' , avec le /, sont des pages différentes. Vous aurez besoin d'un module de réécriture d'URL dans Web.Config si vous voulez que les deux soient traités de la même manière. Je vais modifier ma réponse ci-dessous. – kodikas