@@ -43,7 +43,8 @@ public static async Task<bool> PerformProxyRequest(
4343 HttpContext context ,
4444 HttpClient httpClient ,
4545 Task < Uri > baseUriTask ,
46- CancellationToken applicationStoppingToken )
46+ CancellationToken applicationStoppingToken ,
47+ bool proxy404s )
4748 {
4849 // Stop proxying if either the server or client wants to disconnect
4950 var proxyCancellationToken = CancellationTokenSource . CreateLinkedTokenSource (
@@ -71,7 +72,18 @@ public static async Task<bool> PerformProxyRequest(
7172 using ( var requestMessage = CreateProxyHttpRequest ( context , targetUri ) )
7273 using ( var responseMessage = await SendProxyHttpRequest ( context , httpClient , requestMessage , proxyCancellationToken ) )
7374 {
74- return await CopyProxyHttpResponse ( context , responseMessage , proxyCancellationToken ) ;
75+ if ( ! proxy404s )
76+ {
77+ if ( responseMessage . StatusCode == HttpStatusCode . NotFound )
78+ {
79+ // We're not proxying 404s, i.e., we want to resume the middleware pipeline
80+ // and let some other middleware handle this.
81+ return false ;
82+ }
83+ }
84+
85+ await CopyProxyHttpResponse ( context , responseMessage , proxyCancellationToken ) ;
86+ return true ;
7587 }
7688 }
7789 }
@@ -139,15 +151,8 @@ private static Task<HttpResponseMessage> SendProxyHttpRequest(HttpContext contex
139151 return httpClient . SendAsync ( requestMessage , HttpCompletionOption . ResponseHeadersRead , cancellationToken ) ;
140152 }
141153
142- private static async Task < bool > CopyProxyHttpResponse ( HttpContext context , HttpResponseMessage responseMessage , CancellationToken cancellationToken )
154+ private static async Task CopyProxyHttpResponse ( HttpContext context , HttpResponseMessage responseMessage , CancellationToken cancellationToken )
143155 {
144- if ( responseMessage . StatusCode == HttpStatusCode . NotFound )
145- {
146- // Let some other middleware handle this
147- return false ;
148- }
149-
150- // We can handle this
151156 context . Response . StatusCode = ( int ) responseMessage . StatusCode ;
152157 foreach ( var header in responseMessage . Headers )
153158 {
@@ -166,8 +171,6 @@ private static async Task<bool> CopyProxyHttpResponse(HttpContext context, HttpR
166171 {
167172 await responseStream . CopyToAsync ( context . Response . Body , StreamCopyBufferSize , cancellationToken ) ;
168173 }
169-
170- return true ;
171174 }
172175
173176 private static Uri ToWebSocketScheme ( Uri uri )
0 commit comments