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());
    }
Beispiel #2
0
 public ResponseBodyWriterStream(ResponseBodyPipeWriter responseWriter, Func <bool> allowSynchronousIO)
 {
     _responseWriter     = responseWriter;
     _allowSynchronousIO = allowSynchronousIO;
 }