コード例 #1
0
        private async Task Intercept(HttpContext context, bool isText, string format, ITranscoder transcoder)
        {
            var textPostfix   = isText ? "-text" : "";
            var formatPostfix = format != null ? $"+{format}" : "";

            context.Features.Set <IHttpResponseTrailersFeature>(this);
            context.Request.Protocol    = "HTTP/2";
            context.Request.ContentType = $"application/grpc{formatPostfix}";
            context.Response.OnStarting(() =>
            {
                context.Response.ContentType = $"application/grpc-web{textPostfix}{formatPostfix}";
                return(Task.CompletedTask);
            });

            await transcoder.TranscodeStream(_next);

            if (Trailers.Count > 0)
            {
                _logger.LogDebug("Adding trailers");
                await transcoder.TranscodeTrailers(Trailers);
            }
            else
            {
                _logger.LogDebug("Skipping trailers");
            }
        }