From 34ae239e4f8ca52bbae7911f7ac99d0982752e70 Mon Sep 17 00:00:00 2001 From: Chris R Date: Tue, 3 Nov 2015 09:06:43 -0800 Subject: [PATCH] React to HttpAbstractions changes. --- .../HeaderDictionary.cs | 203 ++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 src/Microsoft.AspNet.Server.WebListener/HeaderDictionary.cs diff --git a/src/Microsoft.AspNet.Server.WebListener/HeaderDictionary.cs b/src/Microsoft.AspNet.Server.WebListener/HeaderDictionary.cs new file mode 100644 index 0000000000..7c78b196f7 --- /dev/null +++ b/src/Microsoft.AspNet.Server.WebListener/HeaderDictionary.cs @@ -0,0 +1,203 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using Microsoft.AspNet.Http; +using Microsoft.Extensions.Primitives; + +namespace Microsoft.AspNet.Server.WebListener +{ + /// + /// Represents a wrapper for RequestHeaders and ResponseHeaders. + /// + internal class HeaderDictionary : IHeaderDictionary + { + public HeaderDictionary(IDictionary store) + { + Store = store; + } + + private IDictionary Store { get; set; } + + /// + /// Get or sets the associated value from the collection as a single string. + /// + /// The header name. + /// the associated value from the collection as a StringValues or StringValues.Empty if the key is not present. + public StringValues this[string key] + { + get + { + StringValues value; + if (TryGetValue(key, out value)) + { + return value; + } + return StringValues.Empty; + } + set + { + if (key == null) + { + throw new ArgumentNullException(nameof(key)); + } + + if (StringValues.IsNullOrEmpty(value)) + { + Store.Remove(key); + } + else + { + Store[key] = value; + } + } + } + + /// + /// Throws KeyNotFoundException if the key is not present. + /// + /// The header name. + /// + StringValues IDictionary.this[string key] + { + get { return Store[key]; } + set { this[key] = value; } + } + + /// + /// Gets the number of elements contained in the ;. + /// + /// The number of elements contained in the . + public int Count + { + get { return Store.Count; } + } + + /// + /// Gets a value that indicates whether the is in read-only mode. + /// + /// true if the is in read-only mode; otherwise, false. + public bool IsReadOnly + { + get { return Store.IsReadOnly; } + } + + public ICollection Keys + { + get { return Store.Keys; } + } + + public ICollection Values + { + get { return Store.Values; } + } + + /// + /// Adds a new list of items to the collection. + /// + /// The item to add. + public void Add(KeyValuePair item) + { + Store.Add(item.Key, item.Value); + } + + /// + /// Adds the given header and values to the collection. + /// + /// The header name. + /// The header values. + public void Add(string key, StringValues value) + { + Store.Add(key, value); + } + + /// + /// Clears the entire list of objects. + /// + public void Clear() + { + Store.Clear(); + } + + /// + /// Returns a value indicating whether the specified object occurs within this collection. + /// + /// The item. + /// true if the specified object occurs within this collection; otherwise, false. + public bool Contains(KeyValuePair item) + { + return Store.Contains(item); + } + + /// + /// Determines whether the contains a specific key. + /// + /// The key. + /// true if the contains a specific key; otherwise, false. + public bool ContainsKey(string key) + { + return Store.ContainsKey(key); + } + + /// + /// Copies the elements to a one-dimensional Array instance at the specified index. + /// + /// The one-dimensional Array that is the destination of the specified objects copied from the . + /// The zero-based index in at which copying begins. + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + Store.CopyTo(array, arrayIndex); + } + + /// + /// Removes the given item from the the collection. + /// + /// The item. + /// true if the specified object was removed from the collection; otherwise, false. + public bool Remove(KeyValuePair item) + { + return Store.Remove(item); + } + + /// + /// Removes the given header from the collection. + /// + /// The header name. + /// true if the specified object was removed from the collection; otherwise, false. + public bool Remove(string key) + { + return Store.Remove(key); + } + + /// + /// Retrieves a value from the dictionary. + /// + /// The header name. + /// The value. + /// true if the contains the key; otherwise, false. + public bool TryGetValue(string key, out StringValues value) + { + return Store.TryGetValue(key, out value); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// An object that can be used to iterate through the collection. + public IEnumerator GetEnumerator() + { + return Store.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through a collection. + /// + /// An object that can be used to iterate through the collection. + IEnumerator> IEnumerable>.GetEnumerator() + { + return Store.GetEnumerator(); + } + } +}