Пример #1
0
 protected override Task Invoke(IDictionary <string, object> env, HttpRequestMessage requestMessage, CancellationToken cancellationToken)
 {
     return(this._invoker.SendAsync(requestMessage, cancellationToken).Then(delegate(HttpResponseMessage responseMessage)
     {
         if (responseMessage.StatusCode == HttpStatusCode.NotFound)
         {
             responseMessage.Dispose();
             return this._next.Invoke(env, requestMessage, cancellationToken);
         }
         Task result;
         try
         {
             result = OwinHttpMessageUtilities.SendResponseMessage(env, responseMessage, cancellationToken).Finally(delegate
             {
                 responseMessage.Dispose();
             }, true);
         }
         catch (Exception)
         {
             responseMessage.Dispose();
             throw;
         }
         return result;
     }, default(CancellationToken), false));
 }
Пример #2
0
        private static Uri CreateRequestUri(IDictionary <string, object> environment, IDictionary <string, string[]> requestHeaders)
        {
            var requestScheme      = OwinHttpMessageUtilities.Get <string>(environment, Constants.RequestSchemeKey);
            var requestPathBase    = OwinHttpMessageUtilities.Get <string>(environment, Constants.RequestPathBaseKey);
            var requestPath        = OwinHttpMessageUtilities.Get <string>(environment, Constants.RequestPathKey);
            var requestQueryString = OwinHttpMessageUtilities.Get <string>(environment, Constants.RequestQueryStringKey);

            // default values, in absence of a host header
            string host = "127.0.0.1";
            int    port = String.Equals(requestScheme, Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase) ? 443 : 80;

            // if a single host header is available
            string[] hostAndPort;
            if (requestHeaders.TryGetValue("Host", out hostAndPort) &&
                hostAndPort != null &&
                hostAndPort.Length == 1 &&
                !String.IsNullOrWhiteSpace(hostAndPort[0]))
            {
                // try to parse as "host:port" format
                int delimiterIndex = hostAndPort[0].LastIndexOf(':');
                int portValue;
                if (delimiterIndex != -1 &&
                    Int32.TryParse(hostAndPort[0].Substring(delimiterIndex + 1), out portValue))
                {
                    // use those two values
                    host = hostAndPort[0].Substring(0, delimiterIndex);
                    port = portValue;
                }
                else
                {
                    // otherwise treat as host name
                    host = hostAndPort[0];
                }
            }

            var uriBuilder = new UriBuilder(requestScheme, host, port, requestPathBase + requestPath);

            if (!String.IsNullOrEmpty(requestQueryString))
            {
                uriBuilder.Query = requestQueryString;
            }
            return(uriBuilder.Uri);
        }
Пример #3
0
        internal static HttpRequestMessage GetRequestMessage(IDictionary <string, object> environment)
        {
            string method = OwinHttpMessageUtilities.Get <string>(environment, "owin.RequestMethod");
            IDictionary <string, string[]> dictionary = OwinHttpMessageUtilities.Get <IDictionary <string, string[]> >(environment, "owin.RequestHeaders");
            Stream             content            = OwinHttpMessageUtilities.Get <Stream>(environment, "owin.RequestBody") ?? Stream.Null;
            Uri                requestUri         = OwinHttpMessageUtilities.CreateRequestUri(environment, dictionary);
            HttpRequestMessage httpRequestMessage = new HttpRequestMessage(new HttpMethod(method), requestUri)
            {
                Content = new StreamContent(content)
            };

            OwinHttpMessageUtilities.MapRequestProperties(httpRequestMessage, environment);
            foreach (KeyValuePair <string, string[]> current in dictionary)
            {
                if (!httpRequestMessage.Headers.TryAddWithoutValidation(current.Key, current.Value))
                {
                    httpRequestMessage.Content.Headers.TryAddWithoutValidation(current.Key, current.Value);
                }
            }
            return(httpRequestMessage);
        }
Пример #4
0
        /// <summary>
        /// Incoming call from prior OWIN middleware
        /// </summary>

        public Task Invoke(IDictionary <string, object> env)
        {
            return(this.Invoke(env, OwinHttpMessageUtilities.GetRequestMessage(env), OwinHttpMessageUtilities.GetCancellationToken(env)));
        }