2017-08-30 9 views
4

Ich versuche, Antwort-Caching in meinem Web-API mit dem "Microsoft.AspNetCore.ResponseCaching" -Paket zu implementieren.ASP.NET Core 2.0 Web API Antwort Caching

ich Postman bin mit der Anwendung zu testen und zu validieren Header usw.

Die richtigen Header mit der angegebenen max-age erzeugt werden, aber Postbote scheint die Antwort von der api zu verlangen und den Cache nicht verwenden. Die Reaktionszeit variiert überhaupt nicht und wenn ich den Controller debugge, kann ich sehen, dass er jedes Mal von der Anfrage getroffen wird.

Startup Klasse ConfigureServices (zusammen mit anderen Sachen):

services.AddResponseCaching(); 

Startup-Klasse konfiguriert (zusammen mit anderen Sachen):

app.UseResponseCaching(); 

app.UseMvc(); 

Controller Aktion:

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

Response-Header von Postmann:

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

Antwort

5

Das Problem wurde behoben. Der obige Code ist in Ordnung! Postman verhinderte das Zwischenspeichern durch eine Einstellung.

dieses Verhalten zu Postman Einstellungen gehen zu beheben:

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

ich in diese auch ausgeführt haben. Obwohl der RFC dieses Verhalten für einen Cache vorschreibt, wenn eine Browseranfrage einen No-Cache/No-Store-Header besitzt, ist dies nur für einen Zwischenspeicher wie einen ISP oder CDN sinnvoll. Der Server sollte nicht gezwungen werden, erneut zu rendern, wenn er der Besitzer des Inhalts ist und weiß, dass er sich nicht geändert hat. Hier ist eine Erweiterung, die ich geschrieben habe, mit der Sie dieses Standardverhalten von ResponseCache von ASP.Net Core deaktivieren können: github.com/speige/AspNetCore.ResponseCaching.Extensions nuget.org/packages/AspNetCore.ResponseCaching.Extensions –

Verwandte Themen