NejCommon.NET/Controllers/ResponseEnricher.cs
honzapatCZ 77a536ee79 init
2024-09-02 17:30:42 +02:00

62 lines
2.1 KiB
C#

using System.Text;
using System.Xml;
using System.Xml.Serialization;
using ClosedXML.Excel;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
namespace NejCommon.Controllers;
public static class Responses
{
public static FileStreamHttpResult RespondXlsx(this ControllerBase controller, XLWorkbook file, string fileName)
{
var stream = new MemoryStream();
file.SaveAs(stream);
stream.Seek(0, SeekOrigin.Begin);
controller.Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
return TypedResults.File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName);
}
public static FileStreamHttpResult RespondXlsxTable<T>(this ControllerBase controller, IEnumerable<T> data, string name = "Data", string? sheetName = null)
{
if (sheetName is null)
{
//limit the name to 31 characters
sheetName = name.Length > 31 ? name.Substring(0, 31) : name;
}
var notebook = new XLWorkbook();
var sheet = notebook.Worksheets.Add(sheetName);
sheet.FirstCell().InsertTable(data);
sheet.Columns().AdjustToContents();
return controller.RespondXlsx(notebook, name + ".xlsx");
}
public static FileStreamHttpResult RespondXml<T>(this ControllerBase controller, T obj, string fileName = "Data.xml")
{
var stream = new MemoryStream();
//use utf8 encoding
var serializer = new XmlSerializer(typeof(T));
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = Encoding.UTF8,
};
//Console.Writeline(stream.Length);
using (var writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, obj);
//Console.Writeline(stream.Length);
stream.Seek(0, SeekOrigin.Begin);
controller.Response.Headers.Add("Content-Disposition", "inline; filename=" + fileName);
return TypedResults.File(stream, "text/xml", fileName);
}
}
}