「Microsoft.AspNetCore.ResponseCaching」パッケージを使用して、WebAPIに応答キャッシュを実装しようとしています。
Postmanを使用して、アプリケーションをテストし、ヘッダーなどを検証しています。
指定されたmax-ageで正しいヘッダーが生成されますが、postmanはキャッシュを使用せずにAPIからの応答を要求しているようです。応答時間はまったく変化しません。コントローラーをデバッグすると、毎回要求がヒットすることがわかります。
スタートアップクラスConfigureServices(および他のもの):
services.AddResponseCaching();
スタートアップクラスConfigure(他のものと一緒に):
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));
}
Postmanからの応答ヘッダー:
cache-control →private,max-age=50
content-type →application/json; charset=utf-8
date →Wed, 30 Aug 2017 11:53:06 GMT
問題を修正しました。上記のコードは大丈夫です! Postmanは、設定によってキャッシュを防止していました。
この動作を修正するには、Postmanの設定に移動します。
General -> Headers -> Send no-cache header -> Set to "OFF"