/// <summary> /// Append string representation of this <see cref="SetCookieHeaderValue"/> to given /// <paramref name="builder"/>. /// </summary> /// <param name="builder"> /// The <see cref="StringBuilder"/> to receive the string representation of this /// <see cref="SetCookieHeaderValue"/>. /// </param> public void AppendToStringBuilder(StringBuilder builder) { builder.Append(_name.AsSpan()); builder.Append("="); builder.Append(_value.AsSpan()); if (Expires.HasValue) { AppendSegment(builder, ExpiresToken, HeaderUtilities.FormatDate(Expires.GetValueOrDefault())); } if (MaxAge.HasValue) { AppendSegment(builder, MaxAgeToken, HeaderUtilities.FormatNonNegativeInt64((long)MaxAge.GetValueOrDefault().TotalSeconds)); } if (Domain != null) { AppendSegment(builder, DomainToken, Domain); } if (Path != null) { AppendSegment(builder, PathToken, Path); } if (Secure) { AppendSegment(builder, SecureToken, null); } if (SameSite != SameSiteMode.None) { AppendSegment(builder, SameSiteToken, SameSite == SameSiteMode.Lax ? SameSiteLaxToken : SameSiteStrictToken); } if (ProtoOnly) { AppendSegment(builder, ProtoOnlyToken, null); } }
public void FormatNonNegativeInt64_Throws_ForNegativeValues(long value) { Assert.Throws <ArgumentOutOfRangeException>(() => HeaderUtilities.FormatNonNegativeInt64(value)); }
// name="value"; expires=Sun, 06 Nov 1994 08:49:37 GMT; max-age=86400; domain=domain1; path=path1; secure; samesite={Strict|Lax}; httponly public override string ToString() { var length = _name.Length + EqualsToken.Length + _value.Length; string maxAge = null; if (Expires.HasValue) { length += SeparatorToken.Length + ExpiresToken.Length + EqualsToken.Length + ExpiresDateLength; } if (MaxAge.HasValue) { maxAge = HeaderUtilities.FormatNonNegativeInt64((long)MaxAge.GetValueOrDefault().TotalSeconds); length += SeparatorToken.Length + MaxAgeToken.Length + EqualsToken.Length + maxAge.Length; } if (Domain != null) { length += SeparatorToken.Length + DomainToken.Length + EqualsToken.Length + Domain.Length; } if (Path != null) { length += SeparatorToken.Length + PathToken.Length + EqualsToken.Length + Path.Length; } if (Secure) { length += SeparatorToken.Length + SecureToken.Length; } if (SameSite != SameSiteMode.None) { var sameSite = SameSite == SameSiteMode.Lax ? SameSiteLaxToken : SameSiteStrictToken; length += SeparatorToken.Length + SameSiteToken.Length + EqualsToken.Length + sameSite.Length; } if (ProtoOnly) { length += SeparatorToken.Length + ProtoOnlyToken.Length; } return(string.Create(length, (this, maxAge), (span, tuple) => { var(headerValue, maxAgeValue) = tuple; Append(ref span, headerValue._name); Append(ref span, EqualsToken); Append(ref span, headerValue._value); if (headerValue.Expires is DateTimeOffset expiresValue) { Append(ref span, SeparatorToken); Append(ref span, ExpiresToken); Append(ref span, EqualsToken); var formatted = expiresValue.TryFormat(span, out var charsWritten, ExpiresDateFormat); span = span.Slice(charsWritten); Debug.Assert(formatted); } if (maxAgeValue != null) { AppendSegment(ref span, MaxAgeToken, maxAgeValue); } if (headerValue.Domain != null) { AppendSegment(ref span, DomainToken, headerValue.Domain); } if (headerValue.Path != null) { AppendSegment(ref span, PathToken, headerValue.Path); } if (headerValue.Secure) { AppendSegment(ref span, SecureToken, null); } if (headerValue.SameSite != SameSiteMode.None) { AppendSegment(ref span, SameSiteToken, headerValue.SameSite == SameSiteMode.Lax ? SameSiteLaxToken : SameSiteStrictToken); } if (headerValue.ProtoOnly) { AppendSegment(ref span, ProtoOnlyToken, null); } })); }
public void FormatNonNegativeInt64_MatchesToString(long value) { Assert.Equal(value.ToString(CultureInfo.InvariantCulture), HeaderUtilities.FormatNonNegativeInt64(value)); }