Beispiel #1
0
        protected virtual IHttpRequestFeature CreateTunnelHttpRequestFeature(HttpContext webSocketConnectionHttpContext,
                                                                             IWebSocketHttpRequest request)
        {
            var requestFeature = new DefaultWebSocketTunnelHttpRequestFeature
            {
                Scheme      = webSocketConnectionHttpContext.Request.IsHttps ? "https" : "http",
                Method      = request.Method,
                Path        = request.Path,
                PathBase    = webSocketConnectionHttpContext.Request.PathBase,
                Protocol    = "HTTP 1.1",
                RawTarget   = "Not supported in web socket tunnel",
                QueryString = request.QueryString,
                Body        = new MemoryStream(request.Content ?? new byte[0]),
                Headers     = new HeaderDictionary()
            };

            if (request.ContentType != null)
            {
                requestFeature.Headers.Add("Content-Type", new StringValues(request.ContentType));
            }

            if (request.Headers != null)
            {
                foreach (var kvp in request.Headers)
                {
                    requestFeature.Headers.Add(kvp.Key, new StringValues(kvp.Value));
                }
            }

            return(requestFeature);
        }
Beispiel #2
0
        protected virtual WebSocketTunnelHttpContext CreateTunnelledHttpRequest(HttpContext webSocketConnectionHttpContext, IWebSocketHttpRequest request, IServiceProvider serviceProvider)
        {
            var context = new WebSocketTunnelHttpContext(this);

            context.Features.Set <IHttpRequestFeature>(CreateTunnelHttpRequestFeature(webSocketConnectionHttpContext,
                                                                                      request));
            context.Features.Set <IHttpRequestLifetimeFeature>(
                new HttpRequestLifetimeFeature {
                RequestAborted = webSocketConnectionHttpContext.RequestAborted
            });
            context.Features.Set <IHttpContextAccessor>(new HttpContextAccessor {
                HttpContext = context
            });
            context.Features.Set <IHttpConnectionFeature>(webSocketConnectionHttpContext.Features
                                                          .Get <IHttpConnectionFeature>());

            context.User            = webSocketConnectionHttpContext.User;
            context.TraceIdentifier = request.CommandId;
            context.RequestServices = serviceProvider;

            return(context);
        }
Beispiel #3
0
 protected virtual Task <bool> OnErrorAsync(IWebSocketHttpRequest request, Exception ex)
 {
     return(Task.FromResult(false));
 }