我已经开发了一个ASP.NET Core中间件解决方案,它可以计算与我执行的
以下是相关的代码摘录:
使用此代码,我能够成功地在HTTP消息中返回ETag响应,并将该ETag放入
但是,在通过Swagger进行测试时,响应的标头具有奇怪的格式,就像我对C#属性执行了
有没有避免 HTTP 响应头中转义字符
在发送其他标头时,输入格式是不带
编辑: 我发现了一种更少直接并且不检查类型(即我不必使用
这样,字符串不会被转义,我可以直接将其复制粘贴到后续请求中。
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-Match
或If-None-Match
标头以供后续响应使用。但是,在通过Swagger进行测试时,响应的标头具有奇怪的格式,就像我对C#属性执行了
.ToString()
操作一样,这里可能有一些我缺失的C#特殊性。...
"date": "Tue, 24 Oct 2017 15:08:39 GMT",
"etag": "\"c96GUyc4QBo5w(...)ggSdPkEdgB1i56Qcs=\"",
"server": "Kestrel",
...
有没有避免 HTTP 响应头中转义字符
\"
的方法?还是我应该确保客户端都理解这个限制并正确解析字符串?在发送其他标头时,输入格式是不带
\"
的字符串,这会增加很多额外的转换工作。编辑: 我发现了一种更少直接并且不检查类型(即我不必使用
EntityTagValue
,可以直接使用字符串)的设置 ETag 的替代方法。actionContext.HttpContext.Response.Headers[HeaderNames.ETag] = eTag;
这样,字符串不会被转义,我可以直接将其复制粘贴到后续请求中。