internal HttpContextBuilder(ApplicationWrapper application, bool allowSynchronousIO, bool preserveExecutionContext) { _application = application ?? throw new ArgumentNullException(nameof(application)); AllowSynchronousIO = allowSynchronousIO; _preserveExecutionContext = preserveExecutionContext; _httpContext = new DefaultHttpContext(); _responseFeature = new ResponseFeature(Abort); _requestLifetimeFeature = new RequestLifetimeFeature(Abort); var request = _httpContext.Request; request.Protocol = HttpProtocol.Http11; request.Method = HttpMethods.Get; _requestPipe = new Pipe(); var responsePipe = new Pipe(); _responseReaderStream = new ResponseBodyReaderStream(responsePipe, ClientInitiatedAbort, ResponseBodyReadComplete); _responsePipeWriter = new ResponseBodyPipeWriter(responsePipe, ReturnResponseMessageAsync); _responseFeature.Body = new ResponseBodyWriterStream(_responsePipeWriter, () => AllowSynchronousIO); _responseFeature.BodyWriter = _responsePipeWriter; _httpContext.Features.Set <IHttpBodyControlFeature>(this); _httpContext.Features.Set <IHttpResponseFeature>(_responseFeature); _httpContext.Features.Set <IHttpResponseBodyFeature>(_responseFeature); _httpContext.Features.Set <IHttpRequestLifetimeFeature>(_requestLifetimeFeature); _httpContext.Features.Set <IHttpResponseTrailersFeature>(_responseTrailersFeature); _httpContext.Features.Set <IHttpUpgradeFeature>(new UpgradeFeature()); }
internal ResponseFeature CreateInternalServerResponse() { var dictionary = new HeaderDictionary(); var response = new ResponseFeature("HTTP/1.1", 500, "Internal Server Error", Stream.Null, dictionary); return(response); }
internal ResponseFeature CreateFourthResponse() { var dictionary = new HeaderDictionary(); var response = new ResponseFeature("HTTP/1.1", 204, "No Content", Stream.Null, dictionary); return(response); }
private async Task HandleRequest <TContext>(string json, IHttpApplication <TContext> application) { var request = RequestPacket.Parse(json); var response = request.Reply(); using (var inputStream = request.ArgumentsStream) using (var outputStream = new MemoryStream()) { try { var features = new FeatureCollection(); var requestFeature = new RequestFeature(); var responseFeature = new ResponseFeature(); requestFeature.Path = request.Command; requestFeature.Body = inputStream; requestFeature.Headers["Content-Type"] = new[] { "application/json" }; responseFeature.Body = outputStream; features.Set <IHttpRequestFeature>(requestFeature); features.Set <IHttpResponseFeature>(responseFeature); var context = application.CreateContext(features); // hand off request to next layer await application.ProcessRequestAsync(context); if (responseFeature.StatusCode != 200) { response.Success = false; } // HttpResponse stream becomes body as is var buffer = outputStream.ToArray(); if (buffer.Length > 0) { response.Body = new JRaw(new String(Encoding.UTF8.GetChars(buffer, 0, buffer.Length))); } } catch (Exception e) { // updating the response object here so that the ResponseStream // prints the latest state when being closed response.Success = false; response.Message = JsonConvert.ToString(e.ToString(), '"', StringEscapeHandling.Default); } finally { // actually write it _writer.WriteLine(response); } } }
internal ResponseFeature CreateFirstResponse() { var output = "[{\"Id\":1,\"Name\":\"Namefc4b8794-943b-487a-9049-a8559232b9dd\"},{\"Id\":2,\"Name\":\"Name244bbada-3e83-43c8-82f7-5b2c4d72f2ed\"},{\"Id\":3,\"Name\":\"Nameec11d080-7f2d-47df-a483-7ff251cdda7a\"},{\"Id\":4,\"Name\":\"Name14ff5a3d-ad92-41f6-b4f6-9b94622f4968\"},{\"Id\":5,\"Name\":\"Name00f9e4cc-673e-4139-ba30-bfc273844678\"},{\"Id\":6,\"Name\":\"Name01f6660c-d1de-4c05-8567-8ae2759c4117\"},{\"Id\":7,\"Name\":\"Name60030a17-6316-427c-a744-b2fff6d9fe11\"},{\"Id\":8,\"Name\":\"Namefa61eb4c-9f9e-47a2-8dc5-15d8afe33f2d\"},{\"Id\":9,\"Name\":\"Name9b680c10-1727-43f5-83cf-c8eda3a63790\"},{\"Id\":10,\"Name\":\"Name9e66d797-d3a9-44ec-814d-aecde8040ced\"}]"; var dictionary = new HeaderDictionary { { HeaderNames.ContentType, "application/json; charset=utf-8" } }; var response = new ResponseFeature("HTTP/1.1", 200, "OK", new MemoryStream(Encoding.ASCII.GetBytes(output)), dictionary); return(response); }
internal ResponseFeature CreateThirdResponse() { var output = "{\"Id\":1,\"Name\":\"Peter\"}"; var dictionary = new HeaderDictionary { { HeaderNames.ContentType, "application/json; charset=utf-8" } }; var response = new ResponseFeature("HTTP/1.1", 200, "OK", new MemoryStream(Encoding.ASCII.GetBytes(output)), dictionary); return(response); }
private Task ReturnThis(HttpContext context, ResponseFeature responseFeature) { context.Response.Body = responseFeature.Body; foreach (var kval in responseFeature.Headers) { context.Response.Headers.Add(kval); } context.Response.StatusCode = responseFeature.StatusCode; context.Response.HttpContext.Features.Get <IHttpResponseFeature>().ReasonPhrase = responseFeature.ReasonPhrase; return(Task.CompletedTask); }
private async Task ReturnThis(HttpContext context, ResponseFeature responseFeature) { await responseFeature.Stream.CopyToAsync(context.Response.Body).ConfigureAwait(false); foreach (var kval in responseFeature.Headers) { context.Response.Headers.Add(kval); } context.Response.StatusCode = responseFeature.StatusCode; context.Response.HttpContext.Features.Get <IHttpResponseFeature>().ReasonPhrase = responseFeature.ReasonPhrase; }
internal ResponseFeature CreateSecondResponse() { var dictionary = new HeaderDictionary { { HeaderNames.Location, "http://localhost:13245/api/ApiCustomers" }, { HeaderNames.ContentType, "application/json; charset=utf-8" } }; var output = "{\"Id\":21,\"Name\":\"Name4752cbf0-e365-43c3-aa8d-1bbc8429dbf8\"}"; var response = new ResponseFeature("HTTP/1.1", 201, "Created", new MemoryStream(Encoding.ASCII.GetBytes(output)), dictionary); return(response); }
private async Task HandleRequest(string json) { var request = RequestPacket.Parse(json); var response = request.Reply(); using (var inputStream = request.ArgumentsStream) using (var outputStream = new MemoryStream()) { try { var httpRequest = new RequestFeature(); httpRequest.Path = request.Command; httpRequest.Body = inputStream; httpRequest.Headers["Content-Type"] = new[] { "application/json" }; var httpResponse = new ResponseFeature(); httpResponse.Body = outputStream; var collection = new FeatureCollection(); collection[typeof(IHttpRequestFeature)] = httpRequest; collection[typeof(IHttpResponseFeature)] = httpResponse; // hand off request to next layer await _next(collection); if (httpResponse.StatusCode != 200) { response.Success = false; } // HttpResponse stream becomes body as is var buffer = outputStream.ToArray(); if (buffer.Length > 0) { response.Body = new JRaw(new String(Encoding.UTF8.GetChars(buffer, 0, buffer.Length))); } } catch (Exception e) { // updating the response object here so that the ResponseStream // prints the latest state when being closed response.Success = false; response.Message = e.ToString(); } finally { // actually write it _writer.WriteLine(response); } } }
public StdioServer(TextReader input, ISharedTextWriter writer) { _input = input; _writer = writer; _cancellation = new CancellationTokenSource(); _httpContextAccessor = new HttpContextAccessor(); _httpContextFactory = new HttpContextFactory(_httpContextAccessor); var features = new FeatureCollection(); var requestFeature = new RequestFeature(); var responseFeature = new ResponseFeature(); features.Set <IHttpRequestFeature>(requestFeature); features.Set <IHttpResponseFeature>(responseFeature); Features = features; }
public StdioServer(TextReader input, ISharedTextWriter writer) { _input = input; _writer = writer; _cancellation = new CancellationTokenSource(); _httpContextAccessor = new HttpContextAccessor(); _objectPoolProvider = new DefaultObjectPoolProvider(); _formOptions = Microsoft.Extensions.Options.Options.Create(new FormOptions()); _httpContextFactory = new HttpContextFactory(_objectPoolProvider, _formOptions, _httpContextAccessor); var features = new FeatureCollection(); var requestFeature = new RequestFeature(); var responseFeature = new ResponseFeature(); features.Set <IHttpRequestFeature>(requestFeature); features.Set <IHttpResponseFeature>(responseFeature); Features = features; }
private async ValueTask <ResponseMessage> ProgressPipeline( HttpContext context, RequestDelegate next, RequestMessage requestMessage, ResponseMessage responseMessage, CancellationToken cancellationToken ) { var requestFeature = new RequestFeature(requestMessage); var responseFeature = new ResponseFeature(responseMessage); var requestLifetimeFeature = new HttpRequestLifetimeFeature { RequestAborted = cancellationToken }; var serviceProviderFeature = context.Features.Get <IServiceProvidersFeature>(); var requestAuthenticationFeature = context.Features.Get <IHttpAuthenticationFeature>(); var formFeature = context.Features.Get <IFormFeature>(); var responseTrailersFeature = context.Features.Get <IHttpResponseTrailersFeature>(); //var httpResponseBodyFeature = context.Features.Get<IHttpResponseBodyFeature>(); //var httpBodyControlFeature = context.Features.Get<IHttpResponseBodyPipeFeature>(); //var httpResponseBodyFeature = context.Features.Get<IHttpResponseFeature>(); GC.KeepAlive(context.Features); var features = new FeatureCollection(); features.Set <IHttpRequestFeature>(new HttpRequestFeature()); features.Set <IHttpResponseFeature>(new HttpResponseFeature()); // features.Set<IHttpRequestFeature>(requestFeature); // features.Set<IHttpResponseFeature>(responseFeature); features.Set <IHttpRequestLifetimeFeature>(requestLifetimeFeature); features.Set <IHttpAuthenticationFeature>(requestAuthenticationFeature); features.Set <IServiceProvidersFeature>(serviceProviderFeature); features.Set <IFormFeature>(formFeature); features.Set <IHttpResponseTrailersFeature>(responseTrailersFeature); //features.Set<IHttpBodyControlFeature>(httpBodyControlFeature); //features.Set<IHttpResponseBodyFeature>(httpResponseBodyFeature); //features.Set<IHttpResponseBodyPipeFeature>(null); var ctx = new DefaultHttpContext(features); await MessageConverter.CopyRequestMessageToTarget(ctx.Request, requestMessage, cancellationToken); IServiceProvider serviceProvider; if (Configuration.InProcessScopeMode != RedTransportInProcessScopeMode.UseRootScope) { //creating a new scope for IServiceProvider. var factory = serviceProviderFeature.RequestServices.GetRequiredService <IServiceScopeFactory>(); serviceProvider = factory.CreateScope().ServiceProvider; serviceProviderFeature = new ServiceProvidersFeature { RequestServices = serviceProvider }; features.Set <IServiceProvidersFeature>(serviceProviderFeature); } else { serviceProvider = serviceProviderFeature.RequestServices; } var memStream = new MemoryStream(); ctx.Response.Body = memStream; //GC.KeepAlive(ctx.Response.Body); ctx.Response.RegisterForDispose(memStream); await next(ctx); return(await MessageConverter.FromResponseAsync(ctx.Response, cancellationToken)); }
private void ElementInspector(IHttpResponseFeature input, ResponseFeature comparison) { Assert.Equal(comparison.StatusCode, input.StatusCode); Assert.Equal(comparison.ReasonPhrase, input.ReasonPhrase); Assert.Equal(comparison.Headers, input.Headers); }
internal HttpApplicationMultipart(ResponseFeature responseFeature) : this(responseFeature.Protocol, responseFeature.StatusCode, responseFeature.ReasonPhrase, responseFeature.Stream, responseFeature.Headers) { }