62 lines
2.2 KiB
C#
62 lines
2.2 KiB
C#
using System.Data;
|
|
using dotenv.net;
|
|
using Microsoft.AspNetCore.WebUtilities;
|
|
using Newtonsoft.Json;
|
|
using PdfService;
|
|
|
|
DotEnv.Load();
|
|
|
|
Stimulsoft.Base.StiLicense.Key =
|
|
"6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHkO46nMQvol4ASeg91in+mGJLnn2KMIpg3eSXQSgaFOm15+0lhekKip+wRGMwXsKpHAkTvorOFqnpF9rchcYoxHXtjNDLiDHZGTIWq6D/2q4k/eiJm9fV6FdaJIUbWGS3whFWRLPHWCBsWnalqTdZlP9knjaWclfjmUKf2Ksc5btMD6pmR7ZHQfHXfdgYK7tLR1rqtxYxBzOPq3LIBvd3spkQhKb07LTZQoyQ3vmRSMALmJSS6ovIS59XPS+oSm8wgvuRFqE1im111GROa7Ww3tNJTA45lkbXX+SocdwXvEZyaaq61Uc1dBg+4uFRxvyRWvX5WDmJz1X0VLIbHpcIjdEDJUvVAN7Z+FW5xKsV5ySPs8aegsY9ndn4DmoZ1kWvzUaz+E1mxMbOd3tyaNnmVhPZeIBILmKJGN0BwnnI5fu6JHMM/9QR2tMO1Z4pIwae4P92gKBrt0MqhvnU1Q6kIaPPuG2XBIvAWykVeH2a9EP6064e11PFCBX4gEpJ3XFD0peE5+ddZh+h495qUc1H2B";
|
|
|
|
SentrySdk.Init(options =>
|
|
{
|
|
options.Dsn = Environment.GetEnvironmentVariable("SENTRY_DSN");
|
|
});
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
var app = builder.Build();
|
|
|
|
app.UseMiddleware<ExceptionHandlerMiddleware>();
|
|
|
|
app.MapPost("/Print", async (HttpContext context) =>
|
|
{
|
|
var request = context.Request;
|
|
var boundary = request.ContentType.Split("boundary=")[1];
|
|
var reader = new MultipartReader(boundary, request.Body);
|
|
|
|
MultipartSection section;
|
|
var parts = new List<(string ContentType, string Content, string ConentDisposition)>();
|
|
|
|
while ((section = await reader.ReadNextSectionAsync()) != null)
|
|
{
|
|
using var sr = new StreamReader(section.Body);
|
|
var content = await sr.ReadToEndAsync();
|
|
var contentType = section.ContentType;
|
|
var contentDisposition = section.ContentDisposition;
|
|
|
|
parts.Add((contentType, content, contentDisposition));
|
|
}
|
|
|
|
string reportTemplate = "";
|
|
string fileName = "";
|
|
dynamic data = null;
|
|
|
|
foreach (var part in parts)
|
|
{
|
|
if (part.ContentType == "application/json")
|
|
{
|
|
data = JsonConvert.DeserializeObject<DataTable>(part.Content);
|
|
}
|
|
else if (part.ContentType == "application/xml")
|
|
{
|
|
reportTemplate = part.Content;
|
|
fileName = part.ConentDisposition?.Split(".")[1];
|
|
}
|
|
}
|
|
|
|
var reportStream = Reporter.Print(reportTemplate, data);
|
|
return Results.File(reportStream, "application/pdf", $"{fileName}.pdf");
|
|
});
|
|
|
|
app.Run(); |