gpt4 book ai didi

c# - 如何在消息响应中返回有效的 ETag?

转载 作者:行者123 更新时间:2023-11-30 17:32:11 25 4
gpt4 key购买 nike

我开发了一个 ASP.NET Core 中间件解决方案,它计算与我正在执行的 GET 请求匹配的 ETag 的值,并在响应中返回它。

相关代码摘录如下:

RequestHeaders requestHeaders = new RequestHeaders(actionContext.HttpContext.Request.Headers);
ResponseHeaders responseHeaders = new ResponseHeaders(actionContext.HttpContext.Response.Headers);

// return not modified for conditional GET and HEAD
if (requestHeaders.IfNoneMatch != null && (requestHeaders.IfNoneMatch.Any(val => val.Tag == eTag || val.Tag == "*")))
{
responseHeaders.ETag = new EntityTagHeaderValue(eTag);
actionContext.Result = new ObjectResult(null) { StatusCode = (int)HttpStatusCode.NotModified };
return;
}

responseHeaders.ETag = new EntityTagHeaderValue(eTag);
responseHeaders.CacheControl = new CacheControlHeaderValue() { MaxAge = TimeSpan.FromSeconds(600), Private = false };

使用此代码,我能够成功地在 HTTP 消息中返回 ETag 响应,并将该 ETag 放入 If-MatchIf-None-Match 用于后续响应的 header 。

但是,我遗漏了一些 C# 的特殊性,因为当通过 Swagger 进行测试时,响应的 header 具有奇怪的格式,就好像我在 C# 属性上执行 .ToString() :

...
"date": "Tue, 24 Oct 2017 15:08:39 GMT",
"etag": "\"c96GUyc4QBo5w(...)ggSdPkEdgB1i56Qcs=\"",
"server": "Kestrel",
...

有没有办法避免 HTTP 响应 header 中的转义 \",或者我应该确保我的客户都理解这个限制并正确解析字符串?

发送其他header时,输入格式是没有\"的字符串,这会带来很多额外的转换工作。

编辑:我发现了另一种设置 ETag 的方法,它不太直接并且不检查类型(即我不必使用 EntityTagValue 并且可以直接使用字符串)

actionContext.HttpContext.Response.Headers[HeaderNames.ETag] = eTag;

这样,字符串就不会被转义,我可以将它直接复制粘贴到其他请求中。

最佳答案

这只是 ToString() 如何表示事物的问题。因为它给的是JSON形式,引号被转义了,又因为E-Tags需要引号(*除外),结果就是引号被转义了。不过,引号不会作为 HTTP 中的实际 E-Tag header 进行转义。

关于c# - 如何在消息响应中返回有效的 ETag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46914080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com