internal RequestState(HttpRequestMessage request, PathString pathBase, CancellationToken cancellationToken) { _request = request; _responseTcs = new TaskCompletionSource <HttpResponseMessage>(); if (request.RequestUri.IsDefaultPort) { request.Headers.Host = request.RequestUri.Host; } else { request.Headers.Host = request.RequestUri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped); } FeatureCollection = new FeatureCollection(); HttpContext = new DefaultHttpContext(FeatureCollection); HttpContext.SetFeature <IHttpRequestFeature>(new RequestFeature()); _responseFeature = new ResponseFeature(); HttpContext.SetFeature <IHttpResponseFeature>(_responseFeature); var serverRequest = HttpContext.Request; serverRequest.Protocol = "HTTP/" + request.Version.ToString(2); serverRequest.Scheme = request.RequestUri.Scheme; serverRequest.Method = request.Method.ToString(); var fullPath = PathString.FromUriComponent(request.RequestUri); PathString remainder; if (fullPath.StartsWithSegments(pathBase, out remainder)) { serverRequest.PathBase = pathBase; serverRequest.Path = remainder; } else { serverRequest.PathBase = PathString.Empty; serverRequest.Path = fullPath; } serverRequest.QueryString = QueryString.FromUriComponent(request.RequestUri); // TODO: serverRequest.CallCancelled = cancellationToken; foreach (var header in request.Headers) { serverRequest.Headers.AppendValues(header.Key, header.Value.ToArray()); } var requestContent = request.Content; if (requestContent != null) { foreach (var header in request.Content.Headers) { serverRequest.Headers.AppendValues(header.Key, header.Value.ToArray()); } } _responseStream = new ResponseStream(CompleteResponse); HttpContext.Response.Body = _responseStream; HttpContext.Response.StatusCode = 200; }
public void StatusCode_DefaultsTo200() { // Arrange & Act var responseInformation = new ResponseFeature(); // Assert Assert.Equal(200, responseInformation.StatusCode); }
public void StatusCode_DefaultsTo200() { // Arrange & Act var responseInformation = new ResponseFeature(); // Assert Assert.Equal(200, responseInformation.StatusCode); Assert.False(responseInformation.HeadersSent); responseInformation.FireOnSendingHeaders(); Assert.True(responseInformation.HeadersSent); }
public async Task <HttpResponse> SendAsync(string method, Uri uri, IDictionary <string, string[]> headers = null, Stream body = null, Action <HttpRequest> onSendingRequest = null) { var request = CreateRequest(method, uri, headers, body); var response = new ResponseFeature(); var features = new FeatureCollection(); features.Add(typeof(IHttpRequestFeature), request); features.Add(typeof(IHttpResponseFeature), response); var httpContext = new DefaultHttpContext(features); if (onSendingRequest != null) { onSendingRequest(httpContext.Request); } await _pipeline(features); response.Body.Seek(0, SeekOrigin.Begin); return(httpContext.Response); }
internal RequestState(HttpRequestMessage request, PathString pathBase) { _request = request; _responseTcs = new TaskCompletionSource<HttpResponseMessage>(); _requestAbortedSource = new CancellationTokenSource(); _pipelineFinished = false; if (request.RequestUri.IsDefaultPort) { request.Headers.Host = request.RequestUri.Host; } else { request.Headers.Host = request.RequestUri.GetComponents(UriComponents.HostAndPort, UriFormat.UriEscaped); } HttpContext = new DefaultHttpContext(); HttpContext.Features.Set<IHttpRequestFeature>(new RequestFeature()); _responseFeature = new ResponseFeature(); HttpContext.Features.Set<IHttpResponseFeature>(_responseFeature); var serverRequest = HttpContext.Request; serverRequest.Protocol = "HTTP/" + request.Version.ToString(2); serverRequest.Scheme = request.RequestUri.Scheme; serverRequest.Method = request.Method.ToString(); var fullPath = PathString.FromUriComponent(request.RequestUri); PathString remainder; if (fullPath.StartsWithSegments(pathBase, out remainder)) { serverRequest.PathBase = pathBase; serverRequest.Path = remainder; } else { serverRequest.PathBase = PathString.Empty; serverRequest.Path = fullPath; } serverRequest.QueryString = QueryString.FromUriComponent(request.RequestUri); foreach (var header in request.Headers) { serverRequest.Headers.Append(header.Key, header.Value.ToArray()); } var requestContent = request.Content; if (requestContent != null) { foreach (var header in request.Content.Headers) { serverRequest.Headers.Append(header.Key, header.Value.ToArray()); } } _responseStream = new ResponseStream(ReturnResponseMessage, AbortRequest); HttpContext.Response.Body = _responseStream; HttpContext.Response.StatusCode = 200; HttpContext.RequestAborted = _requestAbortedSource.Token; }