diff --git a/DXApp.TemplateKitProject/Controllers/DocumentViewerController.cs b/DXApp.TemplateKitProject/Controllers/DocumentViewerController.cs new file mode 100644 index 0000000..638aa97 --- /dev/null +++ b/DXApp.TemplateKitProject/Controllers/DocumentViewerController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using DevExpress.AspNetCore.Reporting.WebDocumentViewer; +using DevExpress.AspNetCore.Reporting.WebDocumentViewer.Native.Services; + +namespace DXApp.TemplateKitProject.Controllers +{ + [Route("DocumentViewer")] + public class DocumentViewerController : WebDocumentViewerController + { + // Hier den erwarteten DevExpress-Service injizieren und an die Basisklasse weitergeben + public DocumentViewerController(IWebDocumentViewerMvcControllerService controllerService) + : base(controllerService) + { + } + } +} \ No newline at end of file diff --git a/DXApp.TemplateKitProject/DXApp.TemplateKitProject.csproj b/DXApp.TemplateKitProject/DXApp.TemplateKitProject.csproj index b0e4ad9..9ad3b1f 100644 --- a/DXApp.TemplateKitProject/DXApp.TemplateKitProject.csproj +++ b/DXApp.TemplateKitProject/DXApp.TemplateKitProject.csproj @@ -29,8 +29,4 @@ - - - - diff --git a/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml b/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml index 8fd4c95..122106c 100644 --- a/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml +++ b/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml @@ -1,2 +1,6 @@ @page -@model DXApp.TemplateKitProject.Pages.Invoices.ViewPdfModel \ No newline at end of file +@model DXApp.TemplateKitProject.Pages.Invoices.ViewPdfModel +@{ + Layout = "_Layout"; + // Diese Seite liefert keinen HTML-Content; der Handler gibt die PDF zurück. +} \ No newline at end of file diff --git a/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs b/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs index 13c9690..a13f182 100644 --- a/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs +++ b/DXApp.TemplateKitProject/Pages/Invoices/ViewPdf.cshtml.cs @@ -1,24 +1,40 @@ -using DXApp.TemplateKitProject.Data; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; +using DXApp.TemplateKitProject.Data; using Microsoft.EntityFrameworkCore; namespace DXApp.TemplateKitProject.Pages.Invoices; -public class ViewPdfModel(AppDbContext db) : PageModel +public class ViewPdfModel : PageModel { + private readonly AppDbContext _db; + private readonly ILogger _logger; + + public ViewPdfModel(AppDbContext db, ILogger logger) + { + _db = db; + _logger = logger; + } + public async Task OnGetAsync(int id) { - var invoice = await db.ZugferdInvoices + // Sicherheit: defensive checks, gleiche Logik wie CustomReportStorageWebExtension + var invoice = await _db.ZugferdInvoices + .AsNoTracking() .FirstOrDefaultAsync(i => i.Id == id); - if (invoice is null || string.IsNullOrEmpty(invoice.ResultFilePath)) + if (invoice is null) + return NotFound(); + + if (string.IsNullOrEmpty(invoice.ResultFilePath)) return NotFound(); if (!System.IO.File.Exists(invoice.ResultFilePath)) return NotFound(); var bytes = await System.IO.File.ReadAllBytesAsync(invoice.ResultFilePath); - return File(bytes, "application/pdf"); + _logger.LogInformation("ViewPdf: Invoice {Id} ausgeliefert ({Size} Bytes).", id, bytes.Length); + + return File(bytes, "application/pdf", $"{Path.GetFileName(invoice.ResultFilePath)}"); } } \ No newline at end of file diff --git a/DXApp.TemplateKitProject/Program.cs b/DXApp.TemplateKitProject/Program.cs index 14ce1b5..e384f61 100644 --- a/DXApp.TemplateKitProject/Program.cs +++ b/DXApp.TemplateKitProject/Program.cs @@ -8,6 +8,9 @@ using DevExpress.XtraReports.Web.Extensions; var builder = WebApplication.CreateBuilder(args); +// MVC-Controller hinzufügen (benötigt für DevExpress WebDocumentViewer) +builder.Services.AddControllersWithViews(); + builder.Services.AddRazorPages(); // DevExpress Controls und Reporting Services @@ -52,5 +55,8 @@ app.UseDevExpressControls(); app.UseRouting(); app.UseAuthorization(); + +// Controller-Routen verfügbar machen (wichtig für DevExpress WebDocumentViewer) +app.MapControllers(); app.MapRazorPages(); app.Run(); \ No newline at end of file