/// <summary>
        ///     Forward the request to the specified upstream host.
        /// </summary>
        /// <param name="context">The HttpContext</param>
        /// <param name="upstreamHost">The upstream host to forward the request
        /// to.</param>
        /// <returns>A <see cref="ForwardContext"/> that represents the
        /// forwarding request context.</returns>
        public static ForwardContext ForwardTo(this HttpContext context, UpstreamHost upstreamHost)
        {
            var upstreamUri = upstreamHost
                              .BuildUpstreamUri(context.Request.Path, context.Request.QueryString);

            return(ForwardTo(context, upstreamUri));
        }
Example #2
0
        /// <summary>
        ///     Forward the request to the specified upstream host.
        /// </summary>
        /// <param name="context">The HttpContext</param>
        /// <param name="upstreamHost">The upstream host to forward the requests
        /// to.</param>
        /// <returns>A <see cref="ForwardContext"/> that represents the
        /// forwarding request context.</returns>
        public static ForwardContext ForwardTo(this HttpContext context, UpstreamHost upstreamHost)
        {
            var uri = new Uri(UriHelper.BuildAbsolute(
                                  upstreamHost.Scheme,
                                  upstreamHost.Host,
                                  upstreamHost.PathBase,
                                  context.Request.Path,
                                  context.Request.QueryString));

            var request = context.Request.CreateProxyHttpRequest();

            request.Headers.Host = uri.Authority;
            request.RequestUri   = uri;

            IHttpClientFactory httpClientFactory;

            try
            {
                httpClientFactory = context
                                    .RequestServices
                                    .GetRequiredService <IHttpClientFactory>();
            }
            catch (InvalidOperationException exception)
            {
                throw new InvalidOperationException(
                          $"{exception.Message} Did you forget to call services.AddProxy()?",
                          exception);
            }

            var httpClient = httpClientFactory.CreateClient(ServiceCollectionExtensions.ProxyKitHttpClientName);

            return(new ForwardContext(context, request, httpClient));
        }
 internal static Uri BuildUpstreamUri(this UpstreamHost upstreamHost, PathString path, QueryString queryString) =>
 new Uri(UriHelper.BuildAbsolute(
             upstreamHost.Scheme,
             upstreamHost.Host,
             upstreamHost.PathBase,
             path,
             queryString));
Example #4
0
        /// <summary>
        ///     Forward the request to the specified upstream host.
        /// </summary>
        /// <param name="context">The HttpContext</param>
        /// <param name="upstreamHost">The upstream host to forward the requests
        /// to.</param>
        /// <returns>A <see cref="ForwardContext"/> that represents the
        /// forwarding request context.</returns>
        public static ForwardContext ForwardTo(this HttpContext context, UpstreamHost upstreamHost)
        {
            var uri = new Uri(UriHelper.BuildAbsolute(
                                  upstreamHost.Scheme,
                                  upstreamHost.Host,
                                  upstreamHost.PathBase,
                                  context.Request.Path,
                                  context.Request.QueryString));

            return(ForwardToUrl(context, uri));
        }
        public static ForwardContext ForwardTo(this HttpContext conext, UpstreamHost upstreamHost)
        {
            var uri = new Uri(UriHelper.BuildAbsolute(
                                  upstreamHost.Scheme,
                                  upstreamHost.Host,
                                  upstreamHost.PathBase,
                                  conext.Request.Path,
                                  conext.Request.QueryString));

            var request = conext.Request.CreateProxyHttpRequest();

            request.Headers.Host = uri.Authority;
            request.RequestUri   = uri;

            var proxyKitClient = conext
                                 .RequestServices
                                 .GetRequiredService <ProxyKitClient>();

            return(new ForwardContext(conext, request, proxyKitClient.Client));
        }
Example #6
0
        /// <summary>
        ///     Forward the request to the specified upstream host.
        /// </summary>
        /// <param name="context">The HttpContext</param>
        /// <param name="upstreamHost">The upstream host to forward the requests
        /// to.</param>
        /// <returns>A <see cref="ForwardContext"/> that represents the
        /// forwarding request context.</returns>
        public static ForwardContext ForwardTo(this HttpContext context, UpstreamHost upstreamHost)
        {
            var uri = new Uri(UriHelper.BuildAbsolute(
                                  upstreamHost.Scheme,
                                  upstreamHost.Host,
                                  upstreamHost.PathBase,
                                  context.Request.Path,
                                  context.Request.QueryString));

            var request = context.Request.CreateProxyHttpRequest();

            request.Headers.Host = uri.Authority;
            request.RequestUri   = uri;

            var httpClientFactory = context
                                    .RequestServices
                                    .GetRequiredService <IHttpClientFactory>();

            var httpClient = httpClientFactory.CreateClient(ServiceCollectionExtensions.ProxyKitHttpClientName);

            return(new ForwardContext(context, request, httpClient));
        }