diff --git a/src/FubarDev.WebDavServer.AspNetCore/LoggingWebDavResponse.cs b/src/FubarDev.WebDavServer.AspNetCore/LoggingWebDavResponse.cs
index f1c660a9..7920c342 100644
--- a/src/FubarDev.WebDavServer.AspNetCore/LoggingWebDavResponse.cs
+++ b/src/FubarDev.WebDavServer.AspNetCore/LoggingWebDavResponse.cs
@@ -4,38 +4,39 @@
using System.Collections.Generic;
using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
using System.Xml.Linq;
using FubarDev.WebDavServer.AspNetCore.Logging;
+using FubarDev.WebDavServer.Utils;
+
+using Microsoft.AspNetCore.Http;
namespace FubarDev.WebDavServer.AspNetCore
{
///
- /// A implementation that buffers the output of a .
+ /// A implementation that buffers the output of a .
///
- public class LoggingWebDavResponse : IWebDavResponse
+ public class LoggingWebDavResponse : WebDavResponse
{
+ private readonly HttpResponse _response;
+
///
/// Initializes a new instance of the class.
///
/// The current WebDAV context.
- public LoggingWebDavResponse(IWebDavContext context)
+ /// The ASP.NET Core HTTP response.
+ public LoggingWebDavResponse(IWebDavContext context, HttpResponse response)
+ : base(context, response)
{
- Context = context;
- ContentType = "text/xml";
+ _response = response;
}
- ///
- public IWebDavContext Context { get; }
-
- ///
- public IDictionary Headers { get; } = new Dictionary();
-
- ///
- public string ContentType { get; set; }
-
- ///
- public Stream Body { get; } = new MemoryStream();
+ ///
+ /// Gets the buffered output stream
+ ///
+ public override Stream Body { get; } = new MemoryStream();
///
/// Loads the into a .
@@ -63,5 +64,16 @@ public LoggingWebDavResponse(IWebDavContext context)
return null;
}
}
+
+ ///
+ /// Writes the buffered output to the http response body
+ ///
+ /// The for the http request
+ /// A representing the asynchronous operation.
+ public async Task WriteBufferedOutPutToResponse(CancellationToken cancellationToken)
+ {
+ Body.Position = 0;
+ await Body.CopyToAsync(_response.Body, SystemInfo.CopyBufferSize, cancellationToken);
+ }
}
}
diff --git a/src/FubarDev.WebDavServer.AspNetCore/WebDavIndirectResult.cs b/src/FubarDev.WebDavServer.AspNetCore/WebDavIndirectResult.cs
index 9c2aadac..d4383aa6 100644
--- a/src/FubarDev.WebDavServer.AspNetCore/WebDavIndirectResult.cs
+++ b/src/FubarDev.WebDavServer.AspNetCore/WebDavIndirectResult.cs
@@ -65,7 +65,7 @@ public override async Task ExecuteResultAsync(ActionContext context)
if (_logger?.IsEnabled(LogLevel.Debug) ?? false)
{
- var loggingResponse = new LoggingWebDavResponse(_context);
+ var loggingResponse = new LoggingWebDavResponse(_context, response);
await _result.ExecuteResultAsync(loggingResponse, context.HttpContext.RequestAborted).ConfigureAwait(false);
if (!string.IsNullOrEmpty(loggingResponse.ContentType))
{
@@ -81,6 +81,9 @@ public override async Task ExecuteResultAsync(ActionContext context)
}
}
}
+
+ await loggingResponse.WriteBufferedOutPutToResponse(context.HttpContext.RequestAborted).ConfigureAwait(false);
+ return;
}
// Writes the XML response
diff --git a/src/FubarDev.WebDavServer.AspNetCore/WebDavResponse.cs b/src/FubarDev.WebDavServer.AspNetCore/WebDavResponse.cs
index 759bcb06..323b39f0 100644
--- a/src/FubarDev.WebDavServer.AspNetCore/WebDavResponse.cs
+++ b/src/FubarDev.WebDavServer.AspNetCore/WebDavResponse.cs
@@ -48,7 +48,7 @@ public string ContentType
}
///
- public Stream Body => _response.Body;
+ public virtual Stream Body => _response.Body;
private class HeadersDictionary : IDictionary
{