From cc8e892f9d127a7bc62ba598a867615f2aa4188d Mon Sep 17 00:00:00 2001 From: Mohammad Mahdi Date: Wed, 20 Aug 2025 12:29:27 +0330 Subject: [PATCH] Fix AOT YAML problem --- .../Context/YamlStaticContext.cs | 10 ++++++++++ VirtualDDNSRouter.Server/Models/Rule.cs | 6 +++--- VirtualDDNSRouter.Server/Program.cs | 18 +----------------- .../Services/YamlParser.cs | 3 ++- .../VirtualDDNSRouter.Server.csproj | 15 +++++++++++---- 5 files changed, 27 insertions(+), 25 deletions(-) create mode 100644 VirtualDDNSRouter.Server/Context/YamlStaticContext.cs diff --git a/VirtualDDNSRouter.Server/Context/YamlStaticContext.cs b/VirtualDDNSRouter.Server/Context/YamlStaticContext.cs new file mode 100644 index 0000000..33e1ee3 --- /dev/null +++ b/VirtualDDNSRouter.Server/Context/YamlStaticContext.cs @@ -0,0 +1,10 @@ +using VirtualDDNSRouter.Server.Models; +using YamlDotNet.Serialization; + +namespace VirtualDDNSRouter.Server.Context; + +[YamlStaticContext] +[YamlSerializable(typeof(Rule))] +public partial class YamlStaticContext : YamlDotNet.Serialization.StaticContext +{ +} \ No newline at end of file diff --git a/VirtualDDNSRouter.Server/Models/Rule.cs b/VirtualDDNSRouter.Server/Models/Rule.cs index 74e3810..c05e12c 100644 --- a/VirtualDDNSRouter.Server/Models/Rule.cs +++ b/VirtualDDNSRouter.Server/Models/Rule.cs @@ -5,9 +5,9 @@ namespace VirtualDDNSRouter.Server.Models; public record Rule { - public string name { get; init; } = string.Empty; - public string apiKey { get; init; } = string.Empty; - public string path { get; init; } = string.Empty; + public string name { get; set; } = string.Empty; + public string apiKey { get; set; } = string.Empty; + public string path { get; set; } = string.Empty; public Rule() { } // Needed for AOT static deserializer } diff --git a/VirtualDDNSRouter.Server/Program.cs b/VirtualDDNSRouter.Server/Program.cs index bf77e79..cfb34d7 100644 --- a/VirtualDDNSRouter.Server/Program.cs +++ b/VirtualDDNSRouter.Server/Program.cs @@ -1,18 +1,10 @@ -using System.Text.Json.Serialization; -using Microsoft.AspNetCore.Http.HttpResults; using VirtualDDNSRouter.Server.Interfaces; -using VirtualDDNSRouter.Server.Models; using VirtualDDNSRouter.Server.Services; using Route = VirtualDDNSRouter.Server.Models.Route; var builder = WebApplication.CreateSlimBuilder(args); -builder.Services.ConfigureHttpJsonOptions(options => -{ - options.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonSerializerContext.Default); -}); - builder.Services.AddSingleton(); // Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi @@ -51,16 +43,8 @@ app.MapGet("/goto/{path}", (string path) => var ruleExists = routes.Any(r => r.path == path); if (!ruleExists) Results.NoContent(); var redirectRoute = routes.FirstOrDefault(r => r.path == path); + if (redirectRoute is null) return Task.FromResult(Results.NotFound()); return Task.FromResult(Results.Redirect($"http://{redirectRoute.ipAddress}:{redirectRoute.port}")); - }); app.Run(); - - - -//[JsonSerializable(typeof(Rule))] -[JsonSerializable(typeof(Route))] -internal partial class AppJsonSerializerContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/VirtualDDNSRouter.Server/Services/YamlParser.cs b/VirtualDDNSRouter.Server/Services/YamlParser.cs index c06d77b..8346293 100644 --- a/VirtualDDNSRouter.Server/Services/YamlParser.cs +++ b/VirtualDDNSRouter.Server/Services/YamlParser.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using VirtualDDNSRouter.Server.Context; using VirtualDDNSRouter.Server.Interfaces; using VirtualDDNSRouter.Server.Models; using YamlDotNet.Serialization; @@ -18,7 +19,7 @@ public class YamlParser : IYamlParser var yamlContent = await File.ReadAllTextAsync(_yamlFilePath).ConfigureAwait(false); // Build the deserializer with explicit naming convention - var deserializer = new DeserializerBuilder() + var deserializer = new StaticDeserializerBuilder(new YamlStaticContext()) .WithNamingConvention(UnderscoredNamingConvention.Instance) // maps api_key -> apiKey .IgnoreUnmatchedProperties() .Build(); diff --git a/VirtualDDNSRouter.Server/VirtualDDNSRouter.Server.csproj b/VirtualDDNSRouter.Server/VirtualDDNSRouter.Server.csproj index fbb3ebb..13f0e30 100644 --- a/VirtualDDNSRouter.Server/VirtualDDNSRouter.Server.csproj +++ b/VirtualDDNSRouter.Server/VirtualDDNSRouter.Server.csproj @@ -1,13 +1,13 @@ - net10.0 + + <!– Publish settings –> true true linux-x64 @@ -19,7 +19,15 @@ false Release true - Size + Size--> + + net10.0 + enable + enable + true + true + true + Linux @@ -27,7 +35,6 @@ -