From 033a1c48b5e1bdc8ec8b86f6dda9e7f129509da9 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Tue, 20 May 2025 13:54:10 +0200 Subject: [PATCH] allow passthrow query parameters --- Pilz.Net/Api/ApiParameterCollection.cs | 2 ++ Pilz.Net/Api/ApiServer.cs | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Pilz.Net/Api/ApiParameterCollection.cs b/Pilz.Net/Api/ApiParameterCollection.cs index c966ec9..f677642 100644 --- a/Pilz.Net/Api/ApiParameterCollection.cs +++ b/Pilz.Net/Api/ApiParameterCollection.cs @@ -1,4 +1,6 @@ using Pilz.Extensions.Collections; +using System.Collections.Specialized; +using System.Web; namespace Pilz.Net.Api; diff --git a/Pilz.Net/Api/ApiServer.cs b/Pilz.Net/Api/ApiServer.cs index 263188d..0bd7dfe 100644 --- a/Pilz.Net/Api/ApiServer.cs +++ b/Pilz.Net/Api/ApiServer.cs @@ -1,5 +1,6 @@ using Castle.Core.Logging; using Pilz.Data; +using Pilz.Extensions.Collections; using Pilz.Extensions.Reflection; using System.Diagnostics.CodeAnalysis; using System.Net; @@ -551,11 +552,13 @@ public class ApiServer : IApiServer objs.Add(getMessage()); else if (info.ParameterType.IsAssignableTo(typeof(ApiRequestInfo))) objs.Add(getRequestInfo()); + else if (info.ParameterType.IsAssignableTo(typeof(IDictionary))) + objs.Add(queryparams.AllKeys.OfType().ToDictionary(n => n, n => HttpUtility.UrlDecode(queryparams.Get(n)))); else if (handler.Parameters.FirstOrDefault(p => p.Name.Equals(info.Name, StringComparison.InvariantCultureIgnoreCase)) is PrivateParameterInfo parameterInfo && url.Split('/').ElementAtOrDefault(parameterInfo.Index) is string parameterValue) objs.Add(Convert.ChangeType(HttpUtility.UrlDecode(parameterValue), info.ParameterType)); // or Uri.UnescapeDataString(); maybe run this line twice? else if (queryparams.AllKeys.FirstOrDefault(n => n != null && n.Equals(info.Name, StringComparison.InvariantCultureIgnoreCase)) is string querykey) - objs.Add(Convert.ChangeType(HttpUtility.HtmlDecode(queryparams.Get(querykey)), info.ParameterType)); + objs.Add(Convert.ChangeType(HttpUtility.UrlDecode(queryparams.Get(querykey)), info.ParameterType)); else objs.Add(null); }