Пример #1
0
        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}");
            }
        }
Пример #2
0
        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"));
        }
Пример #3
0
        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()
            });
        }