// 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.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Net.Http; using System.Web.Http.Controllers; using System.Web.Http.Hosting; using System.Web.Http.Routing; namespace System.Web.Http.Batch { /// /// Provides extension methods for the class. /// [EditorBrowsable(EditorBrowsableState.Never)] public static class BatchHttpRequestMessageExtensions { private const string HttpBatchContextKey = "MS_HttpBatchContext"; private static readonly string[] BatchRequestPropertyExclusions = { HttpPropertyKeys.HttpRouteDataKey, HttpPropertyKeys.DisposableRequestResourcesKey, HttpPropertyKeys.SynchronizationContextKey, HttpPropertyKeys.HttpConfigurationKey, HttpRoute.RoutingContextKey, HttpBatchContextKey }; /// /// Copies the properties from another . /// /// The sub-request. /// The batch request that contains the properties to copy. public static void CopyBatchRequestProperties(this HttpRequestMessage subRequest, HttpRequestMessage batchRequest) { if (subRequest == null) { throw new ArgumentNullException("subRequest"); } if (batchRequest == null) { throw new ArgumentNullException("batchRequest"); } foreach (KeyValuePair property in batchRequest.Properties) { if (!BatchRequestPropertyExclusions.Contains(property.Key)) { subRequest.Properties.Add(property); } } HttpRequestContext originalContext = subRequest.GetRequestContext(); if (originalContext != null) { BatchHttpRequestContext subRequestContext = new BatchHttpRequestContext(originalContext) { Url = new UrlHelper(subRequest) }; subRequest.SetRequestContext(subRequestContext); } } } }