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