private static void SetResponseHeaders(ResponseMessage responseMessage, IResponse response) { // Force setting the Date header (#577) AppendResponseHeader( response, HttpKnownHeaderNames.Date, new[] { DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.RFC1123Pattern, CultureInfo.InvariantCulture) }); // Set other headers foreach (var item in responseMessage.Headers) { var headerName = item.Key; var value = item.Value; if (ResponseHeadersToFix.ContainsKey(headerName)) { ResponseHeadersToFix[headerName]?.Invoke(response, value); } else { // Check if this response header can be added (#148 and #227) if (!HttpKnownHeaderNames.IsRestrictedResponseHeader(headerName)) { AppendResponseHeader(response, headerName, value.ToArray()); } } } }
public void TryGetHeaderName_UnknownStrings_NotFound(string shouldNotBeFound) { char[] key = shouldNotBeFound.ToCharArray(); string name; Assert.False(HttpKnownHeaderNames.TryGetHeaderName(key, 0, key.Length, out name)); Assert.Null(name); }
public unsafe void TryGetHeaderName_IntPtrBuffer_UnknownStrings_NotFound(string shouldNotBeFound) { byte[] buffer = shouldNotBeFound.Select(c => checked ((byte)c)).ToArray(); fixed(byte *pBuffer = buffer) { string name; Assert.False(HttpKnownHeaderNames.TryGetHeaderName(new IntPtr(pBuffer), buffer.Length, out name)); Assert.Null(name); } }
public void TryGetHeaderName_AllHttpKnownHeaderNamesPublicStringConstants_Found(string constant) { char[] key = constant.ToCharArray(); string name1; Assert.True(HttpKnownHeaderNames.TryGetHeaderName(key, 0, key.Length, out name1)); Assert.NotNull(name1); Assert.Equal(constant, name1); string name2; Assert.True(HttpKnownHeaderNames.TryGetHeaderName(key, 0, key.Length, out name2)); Assert.NotNull(name2); Assert.Equal(constant, name2); Assert.Same(name1, name2); }
/// <summary> /// Reads a header line. /// Empty header lines are skipped, as are malformed header lines that are missing a colon character. /// </summary> /// <returns>true if the next header was read successfully, or false if all characters have been read.</returns> public bool ReadHeader(out string name, out string value) { int startIndex; int length; while (ReadLine(out startIndex, out length)) { // Skip empty lines. if (length == 0) { continue; } int colonIndex = Array.IndexOf(_buffer, ':', startIndex, length); // Skip malformed header lines that are missing the colon character. if (colonIndex == -1) { continue; } int nameLength = colonIndex - startIndex; // If it's a known header name, use the known name instead of allocating a new string. if (!HttpKnownHeaderNames.TryGetHeaderName(_buffer, startIndex, nameLength, out name)) { name = new string(_buffer, startIndex, nameLength); } // Normalize header value by trimming white space. int valueStartIndex = colonIndex + 1; int valueLength = startIndex + length - colonIndex - 1; CharArrayHelpers.Trim(_buffer, ref valueStartIndex, ref valueLength); value = GetHeaderValue(name, _buffer, valueStartIndex, valueLength); return(true); } name = null; value = null; return(false); }
private void SetResponseHeaders(ResponseMessage responseMessage, IResponse response) { // Set headers foreach (var pair in responseMessage.Headers) { if (ResponseHeadersToFix.ContainsKey(pair.Key)) { ResponseHeadersToFix[pair.Key]?.Invoke(response, pair.Value); } else { // Check if this response header can be added (#148 and #227) if (!HttpKnownHeaderNames.IsRestrictedResponseHeader(pair.Key)) { #if !USE_ASPNETCORE response.Headers.AppendValues(pair.Key, pair.Value.ToArray()); #else response.Headers.Append(pair.Key, pair.Value.ToArray()); #endif } } } }
public unsafe void TryGetHeaderName_IntPtrBuffer_AllHttpKnownHeaderNamesPublicStringConstants_Found(string constant) { byte[] buffer = constant.Select(c => checked ((byte)c)).ToArray(); fixed(byte *pBuffer = buffer) { Assert.True(pBuffer != null); string name1; Assert.True(HttpKnownHeaderNames.TryGetHeaderName(new IntPtr(pBuffer), buffer.Length, out name1)); Assert.NotNull(name1); Assert.Equal(constant, name1); string name2; Assert.True(HttpKnownHeaderNames.TryGetHeaderName(new IntPtr(pBuffer), buffer.Length, out name2)); Assert.NotNull(name2); Assert.Equal(constant, name2); Assert.Same(name1, name2); } }