using System; using System.Buffers; using System.Text; using System.Web; namespace StreamCinemaWeb.Layouts; public abstract class BasicLayout { protected abstract string Title { get; } protected abstract Task RenderContentAsync(HttpRequest req, TextWriter w); public async Task ExecuteAsync(HttpRequest req) { int statusCode = 200; StringBuilder content = new StringBuilder(); TextWriter w = new StringWriter(content); try { RenderHeader(Title, w); await RenderContentAsync(req, w); RenderFooter(w); } catch (Exception e) { content.Clear(); RenderHeader(Title + " - Error " + e.GetType().Name, w); w.WriteLine("

Error " + e.GetType().Name + "

" + HttpUtility.HtmlEncode(e.Message) + "
"); RenderFooter(w); statusCode = 500; } return Results.Content(content.ToString(), "text/html; charset=utf-8", null, statusCode); } private static void RenderHeader(string title, TextWriter w) { w.WriteLine(""); w.WriteLine(""); w.WriteLine(""); w.WriteLine("" + HttpUtility.HtmlEncode(title) + ""); w.WriteLine(""); w.WriteLine(""); } private static void RenderFooter(TextWriter w) { w.WriteLine(""); } }