From cad72502d9e10e0e0428e729efc4d9931d993dc1 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Fri, 21 Nov 2025 01:41:25 +0800 Subject: [PATCH] :sparkles: Managed page rendering --- DysonNetwork.Zone/Pages/Index.cshtml | 7 +++-- DysonNetwork.Zone/Pages/Index.cshtml.cs | 42 ++++++++++--------------- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/DysonNetwork.Zone/Pages/Index.cshtml b/DysonNetwork.Zone/Pages/Index.cshtml index b3123cc..e21c7e2 100644 --- a/DysonNetwork.Zone/Pages/Index.cshtml +++ b/DysonNetwork.Zone/Pages/Index.cshtml @@ -8,12 +8,15 @@
Logo -

Hello, World 👋

+

404 Not Found

Here are the Solar Network Pages

-

And you're accessing the site @ViewData["SiteName"]

+

And you're accessing the site @(Model.SiteName ?? "main")

The reason you're seeing this is the author of the site haven't configure anything that match this route.

+
+

Path: @Model.CurrentPath Site ID: @(Model.Site?.Id.ToString() ?? "none")

+
diff --git a/DysonNetwork.Zone/Pages/Index.cshtml.cs b/DysonNetwork.Zone/Pages/Index.cshtml.cs index 83fee41..975424a 100644 --- a/DysonNetwork.Zone/Pages/Index.cshtml.cs +++ b/DysonNetwork.Zone/Pages/Index.cshtml.cs @@ -2,17 +2,22 @@ using DysonNetwork.Shared.Models; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; +using System.IO; +using System.Text.Json; namespace DysonNetwork.Zone.Pages; public class IndexModel(AppDatabase db) : PageModel { + public SnPublicationSite? Site { get; set; } public string? SiteName { get; set; } + public string? CurrentPath { get; set; } public async Task OnGet(string? path = null) { var siteNameValue = Request.Headers["X-SiteName"].ToString(); SiteName = siteNameValue; + CurrentPath = Path.Combine("/", path ?? ""); if (string.IsNullOrEmpty(siteNameValue)) { SiteName = null; @@ -20,36 +25,21 @@ public class IndexModel(AppDatabase db) : PageModel else { var capturedName = siteNameValue; - var site = await db.PublicationSites.FirstOrDefaultAsync(s => - s.Name == capturedName && s.Mode == PublicationSiteMode.FullyManaged); - if (site != null) - { - var pagePath = "/" + (path ?? ""); - if (pagePath == "/") pagePath = "/"; + Site = await db.PublicationSites.FirstOrDefaultAsync(s => s.Slug == capturedName); + if (Site == null) return Page(); + var pagePath = CurrentPath; - var page = await db.PublicationPages.FirstOrDefaultAsync(p => - p.SiteId == site.Id && p.Path == pagePath); - if (page != null) - { - if (page.Type == PublicationPageType.HtmlPage) - { - if (page.Config.TryGetValue("html", out var html) && html is string content) - { - return Content(content, "text/html"); - } - } - else if (page.Type == PublicationPageType.Redirect) - { - if (page.Config.TryGetValue("url", out var url) && url is string redirectUrl) - { - return Redirect(redirectUrl); - } - } - } + var page = await db.PublicationPages.FirstOrDefaultAsync(p => p.SiteId == Site.Id && p.Path == pagePath); + if (page == null) return Page(); + switch (page.Type) + { + case PublicationPageType.HtmlPage when page.Config.TryGetValue("html", out var html) && html is JsonElement content: + return Content(content.ToString(), "text/html"); + case PublicationPageType.Redirect when page.Config.TryGetValue("url", out var url) && url is JsonElement redirectUrl: + return Redirect(redirectUrl.ToString()); } } return Page(); } } -