web-dev-qa-db-ja.com

ASP.NET Core 2.0 WebAPI応答キャッシュ

「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
8
Mr. Toast

問題を修正しました。上記のコードは大丈夫です! Postmanは、設定によってキャッシュを防止していました。

この動作を修正するには、Postmanの設定に移動します。

General -> Headers -> Send no-cache header -> Set to "OFF"
8
Mr. Toast