コード例 #1
0
        protected string GetPageId(Uri url, HttpContentHeaders headers = null)
        {
            //Example: Link:</node/6>; rel="shortlink",</home>; rel="canonical"
            var linkHead = "";

            if (headers.TryGetValues("Link", out IEnumerable <string> result))
            {
                linkHead = result.FirstOrDefault();
            }

            if (string.IsNullOrEmpty(linkHead))
            {
                return(url.ToString());
            }
            var tokens = linkHead.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

            foreach (var token in tokens)
            {
                var subTokens = token.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
                if (subTokens.Length != 2)
                {
                    continue;
                }
                if (subTokens[1].Contains("canonical"))
                {
                    return(subTokens[0].Trim('<', '>'));
                }
            }
            return(url.ToString());
        }
コード例 #2
0
            public void EnsureResponseMessagePublished()
            {
                // If the response message hasn't been published yet, do any final processing of it before it is.
                if (!Task.IsCompleted)
                {
                    // On Windows, if the response was automatically decompressed, Content-Encoding and Content-Length
                    // headers are removed from the response. Do the same thing here.
                    DecompressionMethods dm = _handler.AutomaticDecompression;
                    if (dm != DecompressionMethods.None)
                    {
                        HttpContentHeaders   contentHeaders = _responseMessage.Content.Headers;
                        IEnumerable <string> encodings;
                        if (contentHeaders.TryGetValues(HttpKnownHeaderNames.ContentEncoding, out encodings))
                        {
                            foreach (string encoding in encodings)
                            {
                                if (((dm & DecompressionMethods.GZip) != 0 && string.Equals(encoding, EncodingNameGzip, StringComparison.OrdinalIgnoreCase)) ||
                                    ((dm & DecompressionMethods.Deflate) != 0 && string.Equals(encoding, EncodingNameDeflate, StringComparison.OrdinalIgnoreCase)))
                                {
                                    contentHeaders.Remove(HttpKnownHeaderNames.ContentEncoding);
                                    contentHeaders.Remove(HttpKnownHeaderNames.ContentLength);
                                    break;
                                }
                            }
                        }
                    }
                }

                // Now ensure it's published.
                bool result = TrySetResult(_responseMessage);

                Debug.Assert(result || Task.Status == TaskStatus.RanToCompletion,
                             "If the task was already completed, it should have been completed successfully; " +
                             "we shouldn't be completing as successful after already completing as failed.");
            }
コード例 #3
0
        private static bool IsContentHeaderSet(HttpContentHeaders headers, string name, string value)
        {
            if (!headers.TryGetValues(name, out var actualValues))
            {
                return(false);
            }

            return(actualValues.Contains(value));
        }
コード例 #4
0
        private static bool IsContentTypeHeaderSet(HttpContentHeaders headers, string value)
        {
            if (!headers.TryGetValues("Content-Type", out var values))
            {
                return(false);
            }

            return(values.Contains(value));
        }
コード例 #5
0
ファイル: JsonModelReader.cs プロジェクト: eMelgooG/LRS-xApi
        private MediaTypeHeaderValue GetContentType()
        {
            if (Headers.TryGetValues("Content-Type", out IEnumerable <string> values))
            {
                return(ParseContentType(values.FirstOrDefault()));
            }

            throw new JsonModelReaderException("Content-Type header was not found");
        }
コード例 #6
0
ファイル: ODataTestUtil.cs プロジェクト: billwaddyjr/WebApi
        public static string GetDataServiceVersion(HttpContentHeaders headers)
        {
            string dataServiceVersion = null;
            IEnumerable <string> values;

            if (headers.TryGetValues("OData-Version", out values))
            {
                dataServiceVersion = values.FirstOrDefault();
            }
            return(dataServiceVersion);
        }
コード例 #7
0
        public string GetHeader(HttpContentHeaders headers, string name)
        {
            IEnumerable <string> values;

            if (headers.TryGetValues(name, out values))
            {
                return(values.First());
            }

            return(null);
        }
コード例 #8
0
        /// <summary>
        /// Returns an individual HTTP Header value
        /// </summary>
        /// <param name="request"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetHeader(this HttpContentHeaders headers, string key)
        {
            IEnumerable <string> keys = null;

            if (!headers.TryGetValues(key, out keys))
            {
                return(null);
            }

            return(keys.First());
        }
コード例 #9
0
        public static bool IsJsonResponse(HttpContentHeaders headers)
        {
            string value = string.Empty;

            if (headers.TryGetValues("Content-Type", out IEnumerable <string> values))
            {
                value = values.First();
            }

            return(value.Contains("application/json"));
        }
コード例 #10
0
        internal static NotRegisteredUser FromRequest(HttpContentHeaders headers)
        {
            IEnumerable <string> auth;

            if (headers.TryGetValues("Authorization", out auth))
            {
                return(FromBasicAuthToken(auth.FirstOrDefault()));
            }

            return(null);
        }
コード例 #11
0
        public static bool TryGetValue(this HttpContentHeaders http, string name, out string value)
        {
            if (http.TryGetValues(name, out IEnumerable <string> values))
            {
                value = values.ElementAt(0);
                return(true);
            }
            value = null;

            return(false);
        }
コード例 #12
0
        /// <summary>
        /// Extract <see cref="ContentType"/> using
        /// <see cref="HeaderNames.ContentType"/> header.
        /// If any.
        /// </summary>
        public static ContentType GetContentType(this HttpContentHeaders httpContentHeaders)
        {
            _ = httpContentHeaders ?? throw new ArgumentNullException(nameof(httpContentHeaders));

            if (!httpContentHeaders.TryGetValues(HeaderNames.ContentType, out var contentTypes))
            {
                return(null);
            }
            var contentTypeAsString = contentTypes.FirstOrDefault() ?? string.Empty;

            return(new ContentType(contentTypeAsString));
        }
コード例 #13
0
ファイル: WebContentExtractor.cs プロジェクト: AiimiLtd/abot
        protected virtual string GetCharsetFromHeaders(HttpContentHeaders headers)
        {
            string charset = null;

            if (headers.TryGetValues("content-type", out var ctypes))
            {
                var ctype = ctypes.ElementAt(0);
                var ind   = ctype.IndexOf("charset=", StringComparison.CurrentCultureIgnoreCase);
                if (ind != -1)
                {
                    charset = ctype.Substring(ind + 8);
                }
            }
            return(charset);
        }
コード例 #14
0
        public static string GetHeaderValue(this HttpContentHeaders contentHeaders, string headerType)
        {
            if (contentHeaders != null && contentHeaders.TryGetValues(headerType, out var dataList))
            {
                if (dataList == null || dataList.Count() == 0)
                {
                    return("");
                }

                var data = dataList.FirstOrDefault();

                return(data ?? "");
            }

            return("");
        }
コード例 #15
0
        private byte[] DecompressBody(MemoryStream incomingBody, HttpContentHeaders headers)
        {
            if (headers.TryGetValues("Content-Encoding", out var values))
            {
                if (values.Contains("gzip"))
                {
                    using (var uncompressedStream = new GZipStream(incomingBody, CompressionMode.Decompress))
                        using (var resultStream = new MemoryStream())
                        {
                            uncompressedStream.CopyTo(resultStream);
                            return(resultStream.ToArray());
                        }
                }
            }

            return(incomingBody.ToArray());
        }
コード例 #16
0
            public void EnsureResponseMessagePublished()
            {
                // If the response message hasn't been published yet, do any final processing of it before it is.
                if (!Task.IsCompleted)
                {
                    EventSourceTrace("Publishing response message");

                    // On Windows, if the response was automatically decompressed, Content-Encoding and Content-Length
                    // headers are removed from the response. Do the same thing here.
                    DecompressionMethods dm = _handler.AutomaticDecompression;
                    if (dm != DecompressionMethods.None)
                    {
                        HttpContentHeaders   contentHeaders = _responseMessage.Content.Headers;
                        IEnumerable <string> encodings;
                        if (contentHeaders.TryGetValues(HttpKnownHeaderNames.ContentEncoding, out encodings))
                        {
                            foreach (string encoding in encodings)
                            {
                                if (((dm & DecompressionMethods.GZip) != 0 && string.Equals(encoding, EncodingNameGzip, StringComparison.OrdinalIgnoreCase)) ||
                                    ((dm & DecompressionMethods.Deflate) != 0 && string.Equals(encoding, EncodingNameDeflate, StringComparison.OrdinalIgnoreCase)))
                                {
                                    contentHeaders.Remove(HttpKnownHeaderNames.ContentEncoding);
                                    contentHeaders.Remove(HttpKnownHeaderNames.ContentLength);
                                    break;
                                }
                            }
                        }
                    }
                }

                // Now ensure it's published.
                bool completedTask = TrySetResult(_responseMessage);

                Debug.Assert(completedTask || Task.IsCompletedSuccessfully,
                             "If the task was already completed, it should have been completed successfully; " +
                             "we shouldn't be completing as successful after already completing as failed.");

                // If we successfully transitioned it to be completed, we also handed off lifetime ownership
                // of the response to the owner of the task.  Transition our reference on the EasyRequest
                // to be weak instead of strong, so that we don't forcibly keep it alive.
                if (completedTask)
                {
                    Debug.Assert(_selfStrongToWeakReference != null, "Expected non-null wrapper");
                    _selfStrongToWeakReference.MakeWeak();
                }
            }
コード例 #17
0
        static string GetKey(HttpContentHeaders headers)
        {
            if (headers == null)
            {
                throw new ArgumentNullException("headers");
            }

            // N.B. Mono 3.8.0 and earlier do not correctly support
            // the headers.ContentDisposition property, so we
            // access the underlying string value instead.

            IEnumerable <string> values;

            if (!headers.TryGetValues("Content-Disposition", out values))
            {
                throw new ArgumentException("headers.ContentDisposition must not be null.");
            }

            return(values.First());
        }
コード例 #18
0
 public static string?TryGetValue(this HttpContentHeaders headers, string name) =>
 headers.TryGetValues(name, out var values)
         ? string.Concat(values)
         : null;