// 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.Generic; using System.Linq; using Microsoft.Framework.Internal; using Microsoft.Net.Http.Headers; namespace Microsoft.AspNet.Http.Headers { public class RequestHeaders { public RequestHeaders([NotNull] IHeaderDictionary headers) { Headers = headers; } public IHeaderDictionary Headers { get; private set; } public IList Accept { get { return Headers.GetList(HeaderNames.Accept); } set { Headers.SetList(HeaderNames.Accept, value); } } public IList AcceptCharset { get { return Headers.GetList(HeaderNames.AcceptCharset); } set { Headers.SetList(HeaderNames.AcceptCharset, value); } } public IList AcceptEncoding { get { return Headers.GetList(HeaderNames.AcceptEncoding); } set { Headers.SetList(HeaderNames.AcceptEncoding, value); } } public IList AcceptLanguage { get { return Headers.GetList(HeaderNames.AcceptLanguage); } set { Headers.SetList(HeaderNames.AcceptLanguage, value); } } public CacheControlHeaderValue CacheControl { get { return Headers.Get(HeaderNames.CacheControl); } set { Headers.Set(HeaderNames.CacheControl, value); } } public ContentDispositionHeaderValue ContentDisposition { get { return Headers.Get(HeaderNames.ContentDisposition); } set { Headers.Set(HeaderNames.ContentDisposition, value); } } public long? ContentLength { get { return Headers.Get(HeaderNames.ContentLength); } set { Headers.Set(HeaderNames.ContentLength, value.HasValue ? HeaderUtilities.FormatInt64(value.Value) : null); } } public ContentRangeHeaderValue ContentRange { get { return Headers.Get(HeaderNames.ContentRange); } set { Headers.Set(HeaderNames.ContentRange, value); } } public MediaTypeHeaderValue ContentType { get { return Headers.Get(HeaderNames.ContentType); } set { Headers.Set(HeaderNames.ContentType, value); } } public IList Cookie { get { return Headers.GetList(HeaderNames.Cookie); } set { Headers.SetList(HeaderNames.Cookie, value); } } public DateTimeOffset? Date { get { return Headers.GetDate(HeaderNames.Date); } set { Headers.SetDate(HeaderNames.Date, value); } } public DateTimeOffset? Expires { get { return Headers.GetDate(HeaderNames.Expires); } set { Headers.SetDate(HeaderNames.Expires, value); } } public HostString Host { get { return HostString.FromUriComponent(Headers[HeaderNames.Host]); } set { Headers[HeaderNames.Host] = value.ToUriComponent(); } } public IList IfMatch { get { return Headers.GetList(HeaderNames.IfMatch); } set { Headers.SetList(HeaderNames.IfMatch, value); } } public DateTimeOffset? IfModifiedSince { get { return Headers.GetDate(HeaderNames.IfModifiedSince); } set { Headers.SetDate(HeaderNames.IfModifiedSince, value); } } public IList IfNoneMatch { get { return Headers.GetList(HeaderNames.IfNoneMatch); } set { Headers.SetList(HeaderNames.IfNoneMatch, value); } } public RangeConditionHeaderValue IfRange { get { return Headers.Get(HeaderNames.IfRange); } set { Headers.Set(HeaderNames.IfRange, value); } } public DateTimeOffset? IfUnmodifiedSince { get { return Headers.GetDate(HeaderNames.IfUnmodifiedSince); } set { Headers.SetDate(HeaderNames.IfUnmodifiedSince, value); } } public DateTimeOffset? LastModified { get { return Headers.GetDate(HeaderNames.LastModified); } set { Headers.SetDate(HeaderNames.LastModified, value); } } public RangeHeaderValue Range { get { return Headers.Get(HeaderNames.Range); } set { Headers.Set(HeaderNames.Range, value); } } public T Get(string name) { return Headers.Get(name); } public IList GetList(string name) { return Headers.GetList(name); } public void Set([NotNull] string name, object value) { Headers.Set(name, value); } public void SetList([NotNull] string name, IList values) { Headers.SetList(name, values); } public void Append([NotNull] string name, [NotNull] object value) { Headers.Append(name, value.ToString()); } public void AppendList([NotNull] string name, [NotNull] IList values) { Headers.AppendValues(name, values.Select(value => value.ToString()).ToArray()); } } }