@@ -144,13 +144,16 @@ public static Task<bool> WriteToResponse(this IResponse response, object result,
144144
145145 ApplyGlobalResponseHeaders ( response ) ;
146146
147+ IDisposable resultScope = null ;
148+
147149 var httpResult = result as IHttpResult ;
148150 if ( httpResult != null )
149151 {
152+ if ( httpResult . ResultScope != null )
153+ resultScope = httpResult . ResultScope ( ) ;
154+
150155 if ( httpResult . RequestContext == null )
151- {
152156 httpResult . RequestContext = request ;
153- }
154157
155158 var paddingLength = bodyPrefix != null ? bodyPrefix . Length : 0 ;
156159 if ( bodySuffix != null )
@@ -228,40 +231,47 @@ public static Task<bool> WriteToResponse(this IResponse response, object result,
228231 response . ContentType += ContentFormat . Utf8Suffix ;
229232 }
230233
231- var disposableResult = result as IDisposable ;
232- if ( WriteToOutputStream ( response , result , bodyPrefix , bodySuffix ) )
234+ using ( resultScope )
233235 {
234- response . Flush ( ) ; //required for Compression
235- if ( disposableResult != null ) disposableResult . Dispose ( ) ;
236- return TrueTask ;
237- }
236+ var disposableResult = result as IDisposable ;
237+ if ( WriteToOutputStream ( response , result , bodyPrefix , bodySuffix ) )
238+ {
239+ response . Flush ( ) ; //required for Compression
240+ if ( disposableResult != null ) disposableResult . Dispose ( ) ;
241+ return TrueTask ;
242+ }
238243
239- if ( httpResult != null )
240- {
241- result = httpResult . Response ;
242- }
244+ if ( httpResult != null )
245+ result = httpResult . Response ;
243246
244- var responseText = result as string ;
245- if ( responseText != null )
246- {
247- if ( bodyPrefix != null ) response . OutputStream . Write ( bodyPrefix , 0 , bodyPrefix . Length ) ;
248- WriteTextToResponse ( response , responseText , defaultContentType ) ;
249- if ( bodySuffix != null ) response . OutputStream . Write ( bodySuffix , 0 , bodySuffix . Length ) ;
250- return TrueTask ;
251- }
247+ var responseText = result as string ;
248+ if ( responseText != null )
249+ {
250+ if ( bodyPrefix != null ) response . OutputStream . Write ( bodyPrefix , 0 , bodyPrefix . Length ) ;
251+ WriteTextToResponse ( response , responseText , defaultContentType ) ;
252+ if ( bodySuffix != null ) response . OutputStream . Write ( bodySuffix , 0 , bodySuffix . Length ) ;
253+ return TrueTask ;
254+ }
252255
253- if ( defaultAction == null )
254- {
255- throw new ArgumentNullException ( "defaultAction" , String . Format (
256- "As result '{0}' is not a supported responseType, a defaultAction must be supplied" ,
257- ( result != null ? result . GetType ( ) . GetOperationName ( ) : "" ) ) ) ;
258- }
256+ if ( defaultAction == null )
257+ {
258+ throw new ArgumentNullException ( "defaultAction" , String . Format (
259+ "As result '{0}' is not a supported responseType, a defaultAction must be supplied" ,
260+ ( result != null ? result . GetType ( ) . GetOperationName ( ) : "" ) ) ) ;
261+ }
262+
263+ if ( bodyPrefix != null )
264+ response . OutputStream . Write ( bodyPrefix , 0 , bodyPrefix . Length ) ;
259265
260- if ( bodyPrefix != null ) response . OutputStream . Write ( bodyPrefix , 0 , bodyPrefix . Length ) ;
261- if ( result != null ) defaultAction ( request , result , response ) ;
262- if ( bodySuffix != null ) response . OutputStream . Write ( bodySuffix , 0 , bodySuffix . Length ) ;
266+ if ( result != null )
267+ defaultAction ( request , result , response ) ;
263268
264- if ( disposableResult != null ) disposableResult . Dispose ( ) ;
269+ if ( bodySuffix != null )
270+ response . OutputStream . Write ( bodySuffix , 0 , bodySuffix . Length ) ;
271+
272+ if ( disposableResult != null )
273+ disposableResult . Dispose ( ) ;
274+ }
265275
266276 return FalseTask ;
267277 }
0 commit comments