public async Task <IActionResult> Get(int id, [FromQuery] CertificateFormat?format = null) { var cert = await _certificateRetrievalService .GetCertificateByIdAsync(id, CertificateRetrievalOptions.ForRendering); format ??= GetCertificateFormatFromMediaType(Request.Headers[HeaderNames.Accept]) ?? CertificateFormat.Json; switch (format) { case CertificateFormat.Json: return(Ok(new CertificateDto(cert))); case CertificateFormat.Html: var html = await _certificateRenderer .RenderToHtmlAsStringAsync(new CertificateViewModel(cert)); return(Content(html, MediaTypeNames.Text.Html)); case CertificateFormat.Pdf: var stream = await _certificateRenderer .RenderToPdfAsStreamAsync(new CertificateViewModel(cert)); var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); return(File(memoryStream.ToArray(), MediaTypeNames.Application.Pdf)); default: throw new InvalidOperationException($"Unsupported cert format: {format}"); } }
public async Task <IActionResult> DownloadCertificate(int id) { var certificate = await _certificateRetrievalService .GetCertificateByIdAsync(id, CertificateRetrievalOptions.ForRendering); var stream = await _certificateRenderer .RenderToPdfAsStreamAsync(new CertificateViewModel(certificate)); var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); return(File(memoryStream.ToArray(), "application/pdf")); }
public async Task SendCertificateAsync(Certificate certificate, CancellationToken cancellationToken = default) { var pdfStream = await _certificateRenderer .RenderToPdfAsStreamAsync(new CertificateViewModel(certificate)); var memoryStream = new MemoryStream(); await pdfStream.CopyToAsync(memoryStream, cancellationToken); await _emailSender.SendStandardEmailAsync(certificate.RecipientEmail, $"Kursbevis for {certificate.Title}", "Her er kursbeviset! Gratulere!", new Attachment { Filename = "kursbevis.pdf", ContentType = MediaTypeNames.Application.Pdf, Bytes = memoryStream.ToArray() }); }