假设我有一个控制器,其中 HTTP POST 和 HTTP GET 已定义,例如
[HttpGet]
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
public async Task<IActionResult> Get(string id, CancellationToken cancellation = default(CancellationToken))
{
//Some asyc code to retrieve ret...
return new ObjectResult(ret);
}
public async Task<IActionResult> Post(string someContent, CancellationToken cancellation = default(CancellationToken))
{
//Some async code...
//How could I have ETag also appear in the headers or should I
//return the version number of the created resource explicitly in the
//return type?
return CreatedAtAction(nameof(Get), new { Id = "someId" }, "ResultResult");
}
一切都很好,它正在运行,但我想知道如何在响应中添加创建资源的版本作为ETag
标头?是否可以在使用CreatedAtAction
时使用或应该使用其他设施?
这与Implement HTTP Cache (ETag) in ASP.NET Core Web API不同,因为我不是在寻找关于如何将浏览器请求与缓存匹配的中间件,而是如何在对HTTP POST的响应中添加ETag
标头在后端导致创建资源并为其提供版本号。正是这个后端生成的版本号我想包含在响应中,看起来它需要嵌入到结果类型中,但我更喜欢ETag
标题。
通过与Erik的讨论,我注意到将ETag添加到上下文中的一个奇怪的事情,它显示在调试可视化文本中,但在集合中。有什么我没注意到的吗?