2017-08-30 1 views
4

Je tente d'implémenter la mise en cache des réponses dans mon API Web à l'aide du package "Microsoft.AspNetCore.ResponseCaching".Caching de réponse de l'API Web ASP.NET Core 2.0

J'utilise Postman pour tester l'application et la validation des en-têtes, etc.

Les en-têtes corrects sont générés avec le max-age spécifiée mais postier semble demander la réponse du api et ne pas utiliser le cache. Le temps de réponse ne varie pas du tout et si je débogue le contrôleur je peux voir qu'il est frappé par la demande à chaque fois.

ConfigureServices de classe de démarrage (ainsi que d'autres choses):

services.AddResponseCaching(); 

classe de démarrage Configurer (ainsi que d'autres choses):

app.UseResponseCaching(); 

app.UseMvc(); 

Action Controller:

[HttpGet("{employeeNr}", Name = EmployeeAction)] 
    [ResponseCache(Duration = 50)] 
    [Produces(typeof(EmployeeDto))] 
    public async Task<IActionResult> GetEmployee(SpecificEmployeeParameters parameters) 
    { 
     if (!await _employeeRepository.EmployeeExists(parameters.EmployeeNr)) return NotFound(); 

     if (!_typeHelperService.TypeHasProperties<EmployeeDto>(parameters.Fields)) 
      return BadRequest(); 

     var entity = await _employeeRepository.GetEmployee(parameters.EmployeeNr); 

     var result = Mapper.Map<EmployeeDto>(entity); 
     return Ok(result.ShapeData(parameters.Fields)); 
    } 

têtes de réponse de Facteur:

cache-control →private,max-age=50 
content-type →application/json; charset=utf-8 
date →Wed, 30 Aug 2017 11:53:06 GMT 

Répondre

5

Résolution du problème. Le code ci-dessus est correct! Postman empêchait la mise en cache par un paramètre.

Pour résoudre ce comportement aller à Postman Réglages:

General -> Headers -> Send no-cache header -> Set to "OFF" 
+0

J'ai rencontré cela aussi. Bien que le RFC exige ce comportement pour un cache lorsqu'une requête de navigateur a un en-tête no-cache/no-store, cela n'a de sens que pour un cache intermédiaire comme un ISP ou un CDN. Le serveur ne doit pas être forcé de restituer s'il est le propriétaire du contenu et sait qu'il n'a pas changé. Voici une extension que j'ai écrite qui vous permet de désactiver ce comportement par défaut de ResponseCache de ASP.Net Core: github.com/speige/AspNetCore.ResponseCaching.Extensions nuget.org/packages/AspNetCore.ResponseCaching.Extensions –