Skip to content
This repository was archived by the owner on Nov 22, 2018. It is now read-only.

Commit 54be93e

Browse files
BrennanConroyJunTaoLuo
authored andcommitted
feedback
1 parent 9c9010a commit 54be93e

File tree

4 files changed

+26
-46
lines changed

4 files changed

+26
-46
lines changed

src/Microsoft.AspNetCore.ResponseCaching/Internal/HttpHeaderParsingHelpers.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,24 @@ internal static bool TryParseHeaderDate(string input, out DateTimeOffset result)
3737

3838
// Try to get the value of a specific header from a list of headers
3939
// e.g. "header1=10, header2=30"
40-
internal static bool TryGetHeaderValue(StringValues headers, string headerName, out int value)
40+
internal static bool TryParseHeaderTimeSpan(StringValues headers, string headerName, out TimeSpan? value)
4141
{
42-
value = 0;
4342
foreach (var header in headers)
4443
{
4544
var index = header.IndexOf(headerName, StringComparison.OrdinalIgnoreCase);
4645
if (index != -1)
4746
{
4847
index += headerName.Length;
49-
if (!TryParseHeaderValue(index, header, out value))
48+
int seconds;
49+
if (!TryParseHeaderInt(index, header, out seconds))
5050
{
5151
break;
5252
}
53+
value = TimeSpan.FromSeconds(seconds);
5354
return true;
5455
}
5556
}
57+
value = null;
5658
return false;
5759
}
5860

@@ -70,7 +72,7 @@ internal static bool HeaderContains(StringValues headers, string headerName)
7072
return false;
7173
}
7274

73-
private static bool TryParseHeaderValue(int startIndex, string header, out int value)
75+
private static bool TryParseHeaderInt(int startIndex, string header, out int value)
7476
{
7577
var found = false;
7678
while (startIndex != header.Length)

src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCachingContext.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,7 @@ internal TimeSpan? ResponseSharedMaxAge
112112
if (!_parsedResponseSharedMaxAge)
113113
{
114114
_parsedResponseSharedMaxAge = true;
115-
_responseSharedMaxAge = null;
116-
int seconds;
117-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlValues.SharedMaxAgeString, out seconds))
118-
{
119-
_responseSharedMaxAge = TimeSpan.FromSeconds(seconds);
120-
}
115+
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlValues.SharedMaxAgeString, out _responseSharedMaxAge);
121116
}
122117
return _responseSharedMaxAge;
123118
}
@@ -130,12 +125,7 @@ internal TimeSpan? ResponseMaxAge
130125
if (!_parsedResponseMaxAge)
131126
{
132127
_parsedResponseMaxAge = true;
133-
_responseMaxAge = null;
134-
int seconds;
135-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlValues.MaxAgeString, out seconds))
136-
{
137-
_responseMaxAge = TimeSpan.FromSeconds(seconds);
138-
}
128+
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(HttpContext.Response.Headers[HeaderNames.CacheControl], CacheControlValues.MaxAgeString, out _responseMaxAge);
139129
}
140130
return _responseMaxAge;
141131
}

src/Microsoft.AspNetCore.ResponseCaching/Internal/ResponseCachingPolicyProvider.cs

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -163,20 +163,16 @@ public virtual bool IsCachedEntryFresh(ResponseCachingContext context)
163163
var requestCacheControlHeaders = context.HttpContext.Request.Headers[HeaderNames.CacheControl];
164164

165165
// Add min-fresh requirements
166-
int seconds;
167-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(requestCacheControlHeaders, CacheControlValues.MinFreshString, out seconds))
166+
TimeSpan? minFresh;
167+
if (HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(requestCacheControlHeaders, CacheControlValues.MinFreshString, out minFresh))
168168
{
169-
var minFresh = TimeSpan.FromSeconds(seconds);
170-
age += minFresh;
171-
context.Logger.LogExpirationMinFreshAdded(minFresh);
169+
age += minFresh.Value;
170+
context.Logger.LogExpirationMinFreshAdded(minFresh.Value);
172171
}
173172

174173
// Validate shared max age, this overrides any max age settings for shared caches
175-
TimeSpan? cachedSharedMaxAge = null;
176-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(cachedControlHeaders, CacheControlValues.SharedMaxAgeString, out seconds))
177-
{
178-
cachedSharedMaxAge = TimeSpan.FromSeconds(seconds);
179-
}
174+
TimeSpan? cachedSharedMaxAge;
175+
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(cachedControlHeaders, CacheControlValues.SharedMaxAgeString, out cachedSharedMaxAge);
180176

181177
if (age >= cachedSharedMaxAge)
182178
{
@@ -186,17 +182,11 @@ public virtual bool IsCachedEntryFresh(ResponseCachingContext context)
186182
}
187183
else if (!cachedSharedMaxAge.HasValue)
188184
{
189-
TimeSpan? requestMaxAge = null;
190-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(requestCacheControlHeaders, CacheControlValues.MaxAgeString, out seconds))
191-
{
192-
requestMaxAge = TimeSpan.FromSeconds(seconds);
193-
}
185+
TimeSpan? requestMaxAge;
186+
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(requestCacheControlHeaders, CacheControlValues.MaxAgeString, out requestMaxAge);
194187

195-
TimeSpan? cachedMaxAge = null;
196-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(cachedControlHeaders, CacheControlValues.MaxAgeString, out seconds))
197-
{
198-
cachedMaxAge = TimeSpan.FromSeconds(seconds);
199-
}
188+
TimeSpan? cachedMaxAge;
189+
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(cachedControlHeaders, CacheControlValues.MaxAgeString, out cachedMaxAge);
200190

201191
var lowestMaxAge = cachedMaxAge < requestMaxAge ? cachedMaxAge : requestMaxAge ?? cachedMaxAge;
202192
// Validate max age
@@ -209,11 +199,8 @@ public virtual bool IsCachedEntryFresh(ResponseCachingContext context)
209199
return false;
210200
}
211201

212-
TimeSpan? requestMaxStale = null;
213-
if (HttpHeaderParsingHelpers.TryGetHeaderValue(requestCacheControlHeaders, CacheControlValues.MaxStaleString, out seconds))
214-
{
215-
requestMaxStale = TimeSpan.FromSeconds(seconds);
216-
}
202+
TimeSpan? requestMaxStale;
203+
HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(requestCacheControlHeaders, CacheControlValues.MaxStaleString, out requestMaxStale);
217204

218205
// Request allows stale values
219206
if (requestMaxStale.HasValue && age - lowestMaxAge < requestMaxStale)

test/Microsoft.AspNetCore.ResponseCaching.Tests/ParsingHelpersTests.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4+
using System;
45
using Microsoft.AspNetCore.ResponseCaching.Internal;
56
using Microsoft.Extensions.Primitives;
67
using Xunit;
@@ -17,9 +18,9 @@ public class ParsingHelpersTests
1718
[InlineData("header1= 89 , header2= 42", "header2", 42)]
1819
void TryGetHeaderValue_Succeeds(string headerValue, string headerName, int expectedValue)
1920
{
20-
int value;
21-
Assert.True(HttpHeaderParsingHelpers.TryGetHeaderValue(new StringValues(headerValue), headerName, out value));
22-
Assert.Equal(expectedValue, value);
21+
TimeSpan? value;
22+
Assert.True(HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(new StringValues(headerValue), headerName, out value));
23+
Assert.Equal(TimeSpan.FromSeconds(expectedValue), value);
2324
}
2425

2526
[Theory]
@@ -31,8 +32,8 @@ void TryGetHeaderValue_Succeeds(string headerValue, string headerName, int expec
3132
[InlineData(null, null)]
3233
void TryGetHeaderValue_Fails(string headerValue, string headerName)
3334
{
34-
int value;
35-
Assert.False(HttpHeaderParsingHelpers.TryGetHeaderValue(new StringValues(headerValue), headerName, out value));
35+
TimeSpan? value;
36+
Assert.False(HttpHeaderParsingHelpers.TryParseHeaderTimeSpan(new StringValues(headerValue), headerName, out value));
3637
}
3738
}
3839
}

0 commit comments

Comments
 (0)