如何在CreatedAtAction函数生成的响应中添加ETag标头?

时间:2016-12-29 19:46:30

标签: .net asp.net-web-api asp.net-core

假设我有一个控制器,其中 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添加到上下文中的一个奇怪的事情,它显示在调试可视化文本中,但在集合中。有什么我没注意到的吗? Strange: ETag in the debugging text, but not in the collection.

0 个答案:

没有答案