Exemple #1
0
        public BodyRedirector(HttpContext context, Pipe requestPipe, Pipe responsePipe)
        {
            // gRPC middleware don't flush so we have to flush for them
            // This means we need access to their pipe writer, so we switch the body pipe features as well to get raw access
            // Although it seems like we could instead switch the body pipe properties on the request and the response
            // as documented by https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/request-response?view=aspnetcore-3.0#adapters
            // this ability was removed in https://github.com/aspnet/AspNetCore/pull/10154
            _context = context;

            _requestBody          = _context.Request.Body;
            _context.Request.Body = requestPipe.Reader.AsStream(true);
            _requestBodyPipe      = _context.Features.Get <IRequestBodyPipeFeature>();
            _context.Features.Set <IRequestBodyPipeFeature>(
                new RequestBodyPipeFeature {
                Reader = requestPipe.Reader
            });

            _responseBody = _context.Features.Get <IHttpResponseBodyFeature>();
            var responseBody = new ResponseBodyFeature(_responseBody)
            {
                Writer = responsePipe.Writer
            };

            _context.Features.Set <IHttpResponseBodyFeature>(responseBody);
        }
Exemple #2
0
        public GrpcProxy(HttpContext context)
        {
            _context = context;

            _originalProtocol = context.Request.Protocol;
            _originalRequestBodyPipeFeature  = context.Features.Get <IRequestBodyPipeFeature>() !;
            _originalResponseBodyFeature     = context.Features.Get <IHttpResponseBodyFeature>() !;
            _originalResponseTrailersFeature = context.Features.Get <IHttpResponseTrailersFeature>();

            _responseStream = new MemoryStream();
            Trailers        = new HeaderDictionary();
        }