Added preservation of original response encoding.

This commit is contained in:
Daniel Stolt
2015-03-19 12:53:02 +01:00
parent 017a101069
commit fbf39acac6
2 changed files with 7 additions and 5 deletions

View File

@@ -7,12 +7,14 @@ using System.Web;
namespace Orchard.OutputCache.Filters { namespace Orchard.OutputCache.Filters {
public class CaptureStream : Stream { public class CaptureStream : Stream {
public CaptureStream(Stream innerStream) { public CaptureStream(Stream innerStream, Encoding encoding) {
_innerStream = innerStream; _innerStream = innerStream;
_encoding = encoding;
_captureStream = new MemoryStream(); _captureStream = new MemoryStream();
} }
private readonly Stream _innerStream; private readonly Stream _innerStream;
private readonly Encoding _encoding;
private readonly MemoryStream _captureStream; private readonly MemoryStream _captureStream;
public override bool CanRead { public override bool CanRead {
@@ -50,7 +52,7 @@ namespace Orchard.OutputCache.Filters {
public override void Flush() { public override void Flush() {
if (_captureStream.Length > 0) { if (_captureStream.Length > 0) {
OnCaptured(_captureStream); OnCaptured();
_captureStream.SetLength(0); _captureStream.SetLength(0);
} }
@@ -68,8 +70,8 @@ namespace Orchard.OutputCache.Filters {
public event Action<string> Captured; public event Action<string> Captured;
protected virtual void OnCaptured(MemoryStream ms) { protected virtual void OnCaptured() {
string content = HttpContext.Current.Response.ContentEncoding.GetString(ms.ToArray()); var content = _encoding.GetString(_captureStream.ToArray());
Captured(content); Captured(content);
} }
} }

View File

@@ -197,7 +197,7 @@ namespace Orchard.OutputCache.Filters {
// Capture the response output using a custom filter stream. // Capture the response output using a custom filter stream.
var response = filterContext.HttpContext.Response; var response = filterContext.HttpContext.Response;
var captureStream = new CaptureStream(response.Filter); var captureStream = new CaptureStream(response.Filter, response.Output.Encoding);
response.Filter = captureStream; response.Filter = captureStream;
captureStream.Captured += (content) => { captureStream.Captured += (content) => {
try { try {