🖥 Render API
Външен интерфейс за рендиране на отчети — ползван от WPF настолното приложение.
Render API е HTTP интерфейс, който позволява външни клиенти (като WPF настолното приложение) да генерират и визуализират FastReports отчети през уеб сървъра. Това спестява необходимостта WPF да има собствено report rendering — използва се сървърното.
Как работи (поток)
- WPF клиентът подготвя данни за отчета във вид на XML DataSet.
- Прави HTTP POST към
/api/reports/sessionsс името на template-а (напр.stokova.frx) и XML-а. - Сървърът:
- Валидира template-а (трябва да съществува в
wwwroot/reports/) - Парсва XML-а в DataSet
- Създава временна session със GUID и TTL
- Връща JSON с
sessionIdиrenderUrl
- Валидира template-а (трябва да съществува в
- WPF отваря
renderUrlв embedded WebView2 / Chromium браузър. - Страницата
/render/{guid}зарежда FastReports viewer-а с данните от сесията. - Потребителят преглежда, експортва или принтира отчета.
- Сесиите се автоматично почистват от
ReportSessionCleanupServiceслед изтичане на TTL.
Embedded FastReports viewer във WPF приложението
API endpoint
POST /api/reports/sessions
Request body (JSON):
{
"template": "stokova.frx",
"dataXml": "<?xml version='1.0'?><DataSource>...</DataSource>"
}
Response (200 OK):
{
"sessionId": "a1b2c3d4-...",
"renderUrl": "https://host/render/a1b2c3d4-...",
"expiresAt": "2026-05-13T15:30:00Z"
}
Възможни грешки:
400 BadRequest— липсва template или dataXml, или невалиден XML404 NotFound— template файлът не съществува
Защита
Endpoint-ът е AllowAnonymous — не изисква cookie authentication, защото е предназначен за външни клиенти. За production трябва да се добави:
- API key authentication
- Rate limiting
- IP whitelisting (само за известни WPF инсталации)
Внимание: Текущата имплементация не валидира кой и откъде вика endpoint-а. За production deploy това трябва да бъде укрепено.
Където е имплементирано
Controllers/ReportsController.cs— endpoint-ътServices/ReportSessionService.cs— управлява временните сесииServices/ReportSessionCleanupService.cs— background hosted service за изчистване на изтекли сесииComponents/Pages/Render/RenderPage.razor— render страницатаwwwroot/reports/*.frx— FastReports template-ите