Skip to content

Commit

Permalink
fix: Headers are read-only, response has already started
Browse files Browse the repository at this point in the history
  • Loading branch information
hermanho committed Sep 13, 2023
1 parent 3e69864 commit d8ff521
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/Postal.AspNetCore/EmailViewResultExecutor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,18 @@ public class EmailViewResultExecutor : IActionResultExecutor<EmailViewResult>

private const string DefaultContentType = "text/html; charset=utf-8";
private readonly ILogger<EmailViewResultExecutor> _logger;
private readonly IHttpResponseStreamWriterFactory _httpResponseStreamWriterFactory;
private readonly IHttpResponseStreamWriterFactory _writerFactory;

IEmailViewRender Render { get; set; }
IEmailParser Parser { get; set; }

public EmailViewResultExecutor(ILoggerFactory loggerFactory,
IHttpResponseStreamWriterFactory httpResponseStreamWriterFactory,
IHttpResponseStreamWriterFactory writerFactory,
IEmailViewRender render,
IEmailParser parser = null)
{
_logger = loggerFactory.CreateLogger<EmailViewResultExecutor>();
_httpResponseStreamWriterFactory = httpResponseStreamWriterFactory;
_writerFactory = writerFactory;
Render = render;
Parser = parser ?? new EmailParser(Render);
}
Expand Down Expand Up @@ -63,11 +63,16 @@ public async Task ExecuteAsync(ActionContext context, EmailViewResult result)
var requestFeature = httpContext.Features.Get<Microsoft.AspNetCore.Http.Features.IHttpRequestFeature>();
var query = httpContext.Request.Query;
var format = query["format"];
using (var textWriter = _httpResponseStreamWriterFactory.CreateWriter(response.Body, Encoding.UTF8))
var sbBuf = new StringBuilder();
await using (var tw = new StringWriter(sbBuf))
{
var contentType = await WriteEmailAsync(result.Email, textWriter, format);
httpContext.Response.ContentType = await WriteEmailAsync(result.Email, tw, format);
await tw.FlushAsync();
}
await using (var textWriter = _writerFactory.CreateWriter(response.Body, Encoding.UTF8))
{
await textWriter.WriteAsync(sbBuf.ToString());
await textWriter.FlushAsync();
httpContext.Response.ContentType = contentType;
}
}

Expand Down

0 comments on commit d8ff521

Please sign in to comment.