2017-08-30 84 views
4

我想使用「Microsoft.AspNetCore.ResponseCaching」包在我的web api中實現響應緩存。ASP.NET Core 2.0 Web API響應緩存

我使用郵差來測試應用和驗證頭等等

正確的頭被指定的最大年齡,但郵遞員產生似乎請求從API,而不是使用緩存的響應。響應時間根本不變,如果我調試控制器,我可以看到它每次都被請求命中。

啓動類ConfigureServices(連同其他東西):

services.AddResponseCaching(); 

啓動類配置(與其他東西一起):

app.UseResponseCaching(); 

app.UseMvc(); 

控制器動作:

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

響應頭來自郵差:

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

回答

5

修復了這個問題。上面的代碼是可以的! 郵差是由一個設置防止緩存。

要解決此行爲去郵差設置:

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

我碰到這也。雖然RFC在瀏覽器請求具有no-cache/no-store頭時需要這種緩存行爲,但對於像ISP或CDN這樣的中間緩存來說,它確實是有意義的。如果服務器是內容的擁有者並且知道它沒有更改,則不應該強制重新呈現服務器。這是我寫的一個擴展,它允許您關閉ASP.Net Core的ResponseCache的默認行爲:github.com/speige/AspNetCore.ResponseCaching.Extensions nuget.org/packages/AspNetCore.ResponseCaching.Extensions –