Esempio n. 1
0
        /// <summary>Returns a new ProcessRequestOverride func which will take the request, parse it as batch,
        /// unwrap the first part from it and run the passed in func on it, then wrapping the response in batch again.</summary>
        /// <param name="partProcessRequest">The func to run on the single part in the batch</param>
        public static Func <InMemoryWebRequest, InMemoryWebRequest> UnwrapSingleBatchPart(Func <InMemoryWebRequest, InMemoryWebRequest> partProcessRequest)
        {
            return((request) =>
            {
                var batch = BatchWebRequest.FromRequest(request);
                if (batch.Parts.Count > 1 || (batch.Parts.Count == 0 && (batch.Changesets.Count != 1 || batch.Changesets[0].Parts.Count != 1)))
                {
                    throw new Exception("The batch has more than one part in it.");
                }

                IList <InMemoryWebRequest> parts = null;
                if (batch.Parts.Count > 0)
                {
                    parts = batch.Parts;
                }
                else
                {
                    parts = batch.Changesets[0].Parts;
                }
                var part = parts[0];
                string contentId;
                part.RequestHeaders.TryGetValue("Content-ID", out contentId);
                parts.Clear();
                part = partProcessRequest(part);
                part.ResponseHeaders["Content-ID"] = contentId;
                parts.Add(part);

                var response = new InMemoryWebRequest();
                batch.WriteResponse(response);
                return response;
            });
        }