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