Skip to content

Commit 9f1969e

Browse files
committed
reacting to new http context
1 parent fc2b31e commit 9f1969e

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/Http/Http/src/Internal/ReusableHttpRequest.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.IO.Pipelines;
45
using System.Text;
56
using System.Threading;
67
using System.Threading.Tasks;
@@ -18,6 +19,8 @@ public sealed class ReusableHttpRequest : HttpRequest
1819
private readonly static Func<HttpRequest, IFormFeature> _newFormFeature = r => new FormFeature(r);
1920
private readonly static Func<IFeatureCollection, IRequestCookiesFeature> _newRequestCookiesFeature = f => new RequestCookiesFeature(f);
2021
private readonly static Func<IFeatureCollection, IRouteValuesFeature> _newRouteValuesFeature = f => new RouteValuesFeature();
22+
private readonly static Func<HttpContext, IRequestBodyPipeFeature> _newRequestBodyPipeFeature = context => new RequestBodyPipeFeature(context);
23+
2124

2225
private HttpContext _context;
2326
private FeatureReferences<FeatureInterfaces> _features;
@@ -56,6 +59,9 @@ public void Uninitialize()
5659
private IRouteValuesFeature RouteValuesFeature =>
5760
_features.Fetch(ref _features.Cache.RouteValues, _newRouteValuesFeature);
5861

62+
private IRequestBodyPipeFeature RequestBodyPipeFeature =>
63+
_features.Fetch(ref _features.Cache.BodyPipe, this.HttpContext, _newRequestBodyPipeFeature);
64+
5965
public override PathString PathBase
6066
{
6167
get { return new PathString(HttpRequestFeature.PathBase); }
@@ -161,13 +167,20 @@ public override RouteValueDictionary RouteValues
161167
set { RouteValuesFeature.RouteValues = value; }
162168
}
163169

170+
public override PipeReader BodyPipe
171+
{
172+
get { return RequestBodyPipeFeature.RequestBodyPipe; }
173+
set { RequestBodyPipeFeature.RequestBodyPipe = value; }
174+
}
175+
164176
struct FeatureInterfaces
165177
{
166178
public IHttpRequestFeature Request;
167179
public IQueryFeature Query;
168180
public IFormFeature Form;
169181
public IRequestCookiesFeature Cookies;
170182
public IRouteValuesFeature RouteValues;
183+
public IRequestBodyPipeFeature BodyPipe;
171184
}
172185
}
173186
}

src/Http/Http/src/Internal/ReusableHttpResponse.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.IO.Pipelines;
45
using System.Text;
56
using System.Threading.Tasks;
67
using Microsoft.AspNetCore.Http.Features;
@@ -13,6 +14,7 @@ public sealed class ReusableHttpResponse : HttpResponse
1314
// Lambdas hoisted to static readonly fields to improve inlining https://github.com/dotnet/roslyn/issues/13624
1415
private readonly static Func<IFeatureCollection, IHttpResponseFeature> _nullResponseFeature = f => null;
1516
private readonly static Func<IFeatureCollection, IResponseCookiesFeature> _newResponseCookiesFeature = f => new ResponseCookiesFeature(f);
17+
private readonly static Func<HttpContext, IResponseBodyPipeFeature> _newResponseBodyPipeFeature = context => new ResponseBodyPipeFeature(context);
1618

1719
private HttpContext _context;
1820
private FeatureReferences<FeatureInterfaces> _features;
@@ -39,7 +41,8 @@ public void Uninitialize()
3941

4042
private IResponseCookiesFeature ResponseCookiesFeature =>
4143
_features.Fetch(ref _features.Cache.Cookies, _newResponseCookiesFeature);
42-
44+
private IResponseBodyPipeFeature ResponseBodyPipeFeature =>
45+
_features.Fetch(ref _features.Cache.BodyPipe, this.HttpContext, _newResponseBodyPipeFeature);
4346

4447
public override HttpContext HttpContext { get { return _context; } }
4548

@@ -90,6 +93,12 @@ public override IResponseCookies Cookies
9093
get { return ResponseCookiesFeature.Cookies; }
9194
}
9295

96+
public override PipeWriter BodyPipe
97+
{
98+
get { return ResponseBodyPipeFeature.ResponseBodyPipe; }
99+
set { ResponseBodyPipeFeature.ResponseBodyPipe = value; }
100+
}
101+
93102
public override bool HasStarted
94103
{
95104
get { return HttpResponseFeature.HasStarted; }
@@ -133,6 +142,7 @@ struct FeatureInterfaces
133142
{
134143
public IHttpResponseFeature Response;
135144
public IResponseCookiesFeature Cookies;
145+
public IResponseBodyPipeFeature BodyPipe;
136146
}
137147
}
138148
}

0 commit comments

Comments
 (0)