aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author杨宇千 <crupest@outlook.com>2019-08-27 12:43:19 +0800
committer杨宇千 <crupest@outlook.com>2019-08-27 12:43:19 +0800
commit99120ebedea6b8a9400901886a3f828d3466633b (patch)
tree6045b54448d7e0a8a472f28f8e64fc8c059bc097
parenta7ecdfb52c1d0406cec55e8dcee13f5fc0d52b8f (diff)
downloadtimeline-99120ebedea6b8a9400901886a3f828d3466633b.tar.gz
timeline-99120ebedea6b8a9400901886a3f828d3466633b.tar.bz2
timeline-99120ebedea6b8a9400901886a3f828d3466633b.zip
Add Cache-Control and ETag headers for 304 to satisfy standards.
-rw-r--r--Timeline/Controllers/UserAvatarController.cs12
1 files changed, 10 insertions, 2 deletions
diff --git a/Timeline/Controllers/UserAvatarController.cs b/Timeline/Controllers/UserAvatarController.cs
index bbfad6af..d072bff2 100644
--- a/Timeline/Controllers/UserAvatarController.cs
+++ b/Timeline/Controllers/UserAvatarController.cs
@@ -64,9 +64,13 @@ namespace Timeline.Controllers
public async Task<IActionResult> Get([FromRoute] string username)
{
const string IfNonMatchHeaderKey = "If-None-Match";
+ const string CacheControlHeaderKey = "Cache-Control";
+ const string CacheControlHeaderValue = "no-cache, must-revalidate, max-age=1";
+
try
{
- var eTag = new EntityTagHeaderValue($"\"{await _service.GetAvatarETag(username)}\"");
+ var eTagValue = $"\"{await _service.GetAvatarETag(username)}\"";
+ var eTag = new EntityTagHeaderValue(eTagValue);
if (Request.Headers.TryGetValue(IfNonMatchHeaderKey, out var value))
{
@@ -74,13 +78,17 @@ namespace Timeline.Controllers
return BadRequest(CommonResponse.BadIfNonMatch());
if (eTagList.First(e => e.Equals(eTag)) != null)
+ {
+ Response.Headers.Add(CacheControlHeaderKey, CacheControlHeaderValue);
+ Response.Headers.Add("ETag", eTagValue);
return StatusCode(StatusCodes.Status304NotModified);
+ }
}
var avatarInfo = await _service.GetAvatar(username);
var avatar = avatarInfo.Avatar;
- Response.Headers.Add("Cache-Control", "no-cache, must-revalidate, max-age=1");
+ Response.Headers.Add(CacheControlHeaderKey, CacheControlHeaderValue);
return File(avatar.Data, avatar.Type, new DateTimeOffset(avatarInfo.LastModified), eTag);
}
catch (UserNotExistException e)