c# - Bad Request的Cache-Control最佳实践(400)

标签 c# asp.net-web-api asp.net-core cache-control

目前我有以下操作,它将告诉客户端将响应缓存 1200 秒:

[ResponseCache(Location = ResponseCacheLocation.Client, Duration = 1200)]
[HttpGet("universities")]
public IActionResult GetAllUniversities(string location)
{
    if (/*location not found*/)
      return BadRequest();

    ...
    return Ok(universities);
}

在响应 header 中,当它返回 Ok (200) 时,我收到以下值:

Cache-Control: private, max-age=1200

正如预期的那样完美。

当我将错误的位置传递给 API 并且 API 返回 BadRequest (400) 时,它也会返回与上面相同的 Cache-Control 值。

我的问题是,这是最佳实践吗?或者它应该返回 no-cache, no-store 而不是 400?如果应该,我如何在 200 时返回 private, max-age=1200 并仅针对此特定操作在 .NET Core 中返回 no-cache, no-store

最佳答案

您应该使用ASP.NET Core 中的响应缓存中间件,它仅缓存 200 个状态代码响应,并忽略其他错误响应。

有关如何实现的更多信息,请参阅 - https://learn.microsoft.com/en-us/aspnet/core/performance/caching/middleware?tabs=aspnetcore2x

关于c# - Bad Request的Cache-Control最佳实践(400),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47088611/

相关文章:

c# - Web API中基于 token 的实现可保护端点

c# - 从 .NET 核心类导出接口(interface)

c# - .NET Web API 2 依赖项注入(inject) - 依赖项列表

c# - IMAPI界面可以选择刻录模式吗?

c# - 如何在 ASP.NET WebAPI 中返回文件 (FileContentResult)

visual-studio - 在 VS2017 中针对多个框架时发布失败

asp.net-core - 如何在 ASP.NET Core 中检索 Controller 类型?

azure - 在 Azure 应用服务中管理 ASP.NET Core Web API secret 的最佳实践

c# - 多线程还是不多线程?

c# - 如何将字符串转换为运行时确定的可空类型?