@@ -29,16 +29,20 @@ public ResponseLoggingMiddleware(RequestDelegate next)
2929 #region public async Task Invoke(HttpContext context)
3030 public async Task Invoke ( HttpContext context , RequestResponseMiddlewareLoggingConfig configuration )
3131 {
32- var url = context . Request . GetDisplayUrl ( ) ;
33- var bodyStream = context . Response . Body ;
32+ if ( configuration . LogResponses == false )
33+ {
34+ await next ( context ) ;
35+ }
36+ else
37+ {
38+ var url = context . Request . GetDisplayUrl ( ) ;
39+ var bodyStream = context . Response . Body ;
3440
35- var responseBodyStream = new MemoryStream ( ) ;
36- context . Response . Body = responseBodyStream ;
41+ var responseBodyStream = new ResponseLoggingMemoryStream ( ) ;
42+ context . Response . Body = responseBodyStream ;
3743
38- await next ( context ) ;
44+ await next ( context ) ;
3945
40- if ( configuration . LogResponses )
41- {
4246 responseBodyStream . Seek ( 0 , SeekOrigin . Begin ) ;
4347 var responseBody = await new StreamReader ( responseBodyStream ) . ReadToEndAsync ( ) ;
4448 StringBuilder logMessage = new StringBuilder ( ) ;
@@ -52,12 +56,36 @@ public async Task Invoke(HttpContext context, RequestResponseMiddlewareLoggingCo
5256 Helpers . LogMessage ( url , logMessage , configuration . LoggingLevel ) ;
5357
5458 responseBodyStream . Seek ( 0 , SeekOrigin . Begin ) ;
55- }
59+ await responseBodyStream . CopyToAsync ( bodyStream ) ;
5660
57- await responseBodyStream . CopyToAsync ( bodyStream ) ;
61+ if ( responseBodyStream . IsDisposed ( ) && context . Request . Headers . ContainsKey ( "SOAPAction" ) )
62+ {
63+ responseBodyStream . ForceClose ( ) ;
64+ }
65+ }
5866 }
5967 #endregion
6068
6169 #endregion
6270 }
71+
72+ public class ResponseLoggingMemoryStream : MemoryStream
73+ {
74+ public override void Close ( )
75+ {
76+ // Dont close by default
77+ // base.Close();
78+ }
79+
80+ public void ForceClose ( )
81+ {
82+ base . Close ( ) ;
83+ }
84+
85+ public bool IsDisposed ( )
86+ {
87+ return this . CanRead && this . CanSeek && this . CanWrite ;
88+ }
89+
90+ }
6391}
0 commit comments