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

Commit bd26df3

Browse files
committed
Added 'quoted' parameter
1 parent 3f5f7e4 commit bd26df3

File tree

4 files changed

+42
-14
lines changed

4 files changed

+42
-14
lines changed

src/Microsoft.Net.Http.Headers/ContentDispositionHeaderValue.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ private void SetDate(string parameter, DateTimeOffset? date)
321321
else
322322
{
323323
// Must always be quoted
324-
var dateString = string.Format(CultureInfo.InvariantCulture, "\"{0}\"", HeaderUtilities.FormatDate(date.Value));
324+
var dateString = HeaderUtilities.FormatDate(date.Value, quoted: true);
325325
if (dateParameter != null)
326326
{
327327
dateParameter.Value = dateString;

src/Microsoft.Net.Http.Headers/DateTimeFormatter.cs

+20-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ internal static class DateTimeFormatter
1616
private static readonly string[] DayNames = FormatInfo.AbbreviatedDayNames;
1717

1818
private static readonly int Rfc1123DateLength = "ddd, dd MMM yyyy HH:mm:ss GMT".Length;
19+
private static readonly int QuotedRfc1123DateLength = Rfc1123DateLength + 2;
1920

2021
// ASCII numbers are in the range 48 - 57.
2122
private const int AsciiNumberOffset = 0x30;
@@ -24,11 +25,24 @@ internal static class DateTimeFormatter
2425
private const char Comma = ',';
2526
private const char Space = ' ';
2627
private const char Colon = ':';
28+
private const char Quote = '"';
2729

2830
public static string ToRfc1123String(this DateTimeOffset dateTime)
31+
{
32+
return ToRfc1123String(dateTime, false);
33+
}
34+
35+
public static string ToRfc1123String(this DateTimeOffset dateTime, bool quoted)
2936
{
3037
var universal = dateTime.UtcDateTime;
31-
var target = new InplaceStringBuilder(Rfc1123DateLength);
38+
39+
var length = quoted ? QuotedRfc1123DateLength : Rfc1123DateLength;
40+
var target = new InplaceStringBuilder(length);
41+
42+
if (quoted)
43+
{
44+
target.Append(Quote);
45+
}
3246

3347
target.Append(DayNames[(int)universal.DayOfWeek]);
3448
target.Append(Comma);
@@ -43,6 +57,11 @@ public static string ToRfc1123String(this DateTimeOffset dateTime)
4357
target.Append(Space);
4458
target.Append(Gmt);
4559

60+
if (quoted)
61+
{
62+
target.Append(Quote);
63+
}
64+
4665
return target.ToString();
4766
}
4867

src/Microsoft.Net.Http.Headers/HeaderUtilities.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,12 @@ public static bool TryParseDate(string input, out DateTimeOffset result)
220220

221221
public static string FormatDate(DateTimeOffset dateTime)
222222
{
223-
return dateTime.ToRfc1123String();
223+
return FormatDate(dateTime, false);
224+
}
225+
226+
public static string FormatDate(DateTimeOffset dateTime, bool quoted)
227+
{
228+
return dateTime.ToRfc1123String(quoted);
224229
}
225230

226231
public static string RemoveQuotes(string input)

test/Microsoft.Net.Http.Headers.Tests/HeaderUtilitiesTest.cs

+15-11
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,33 @@ public static class HeaderUtilitiesTest
1212

1313
[Theory]
1414
[MemberData(nameof(TestValues))]
15-
public static void ReturnsSameResultAsRfc1123String(DateTimeOffset dateTime)
15+
public static void ReturnsSameResultAsRfc1123String(DateTimeOffset dateTime, bool quoted)
1616
{
17-
var expected = dateTime.ToString(Rfc1123Format);
18-
var actual = HeaderUtilities.FormatDate(dateTime);
17+
var formatted = dateTime.ToString(Rfc1123Format);
18+
var expected = quoted ? $"\"{formatted}\"" : formatted;
19+
var actual = HeaderUtilities.FormatDate(dateTime, quoted);
1920

2021
Assert.Equal(expected, actual);
2122
}
2223

23-
public static TheoryData<DateTimeOffset> TestValues
24+
public static TheoryData<DateTimeOffset, bool> TestValues
2425
{
2526
get
2627
{
27-
var data = new TheoryData<DateTimeOffset>();
28+
var data = new TheoryData<DateTimeOffset, bool>();
2829

2930
var now = DateTimeOffset.Now;
3031

31-
for (var i = 0; i < 60; i++)
32+
foreach (var quoted in new[] { true, false })
3233
{
33-
data.Add(now.AddSeconds(i));
34-
data.Add(now.AddMinutes(i));
35-
data.Add(now.AddDays(i));
36-
data.Add(now.AddMonths(i));
37-
data.Add(now.AddYears(i));
34+
for (var i = 0; i < 60; i++)
35+
{
36+
data.Add(now.AddSeconds(i), quoted);
37+
data.Add(now.AddMinutes(i), quoted);
38+
data.Add(now.AddDays(i), quoted);
39+
data.Add(now.AddMonths(i), quoted);
40+
data.Add(now.AddYears(i), quoted);
41+
}
3842
}
3943

4044
return data;

0 commit comments

Comments
 (0)