From 5e8f0922bd8745102c0fae8f6cbb75707ca54278 Mon Sep 17 00:00:00 2001 From: Michael Allen Date: Thu, 1 Jan 2026 14:42:04 -0500 Subject: [PATCH] + (Lava) Improved the RenderLavaEndpoint command to parse the querystring in the route parameter. --- Rock/Lava/Blocks/RenderLavaEndpoint.cs | 28 ++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/Rock/Lava/Blocks/RenderLavaEndpoint.cs b/Rock/Lava/Blocks/RenderLavaEndpoint.cs index 08d68780d27..ca3afe82af7 100644 --- a/Rock/Lava/Blocks/RenderLavaEndpoint.cs +++ b/Rock/Lava/Blocks/RenderLavaEndpoint.cs @@ -17,7 +17,9 @@ using System; using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; +using System.Linq; using System.Web; using Rock.Cms; @@ -63,6 +65,16 @@ public override void OnRender( ILavaRenderContext context, TextWriter result ) } var route = settings["route"].TrimStart( "^/".ToCharArray() ); + NameValueCollection queryParams = null; + + // Split out query string + var splitRoute = route.Split( new[] { '?' }, 2 ); + if ( splitRoute.Length == 2 ) + { + route = splitRoute[0]; + queryParams = splitRoute[1].ParseQueryString(); + } + var routeComponents = route.Split( new[] { '/' }, 2 ); // Check for invalid route @@ -98,7 +110,7 @@ public override void OnRender( ILavaRenderContext context, TextWriter result ) return; } - result.Write( MergeRequest( lavaEndpoint, lavaApplication, currentPerson ) ); + result.Write( MergeRequest( lavaEndpoint, lavaApplication, currentPerson, queryParams ) ); } /// @@ -150,12 +162,24 @@ private static Person GetCurrentPerson( ILavaRenderContext context ) /// The lava endpoint. /// The lava application. /// The current person related to this rendering request. + /// The query parameters extracted from the route. /// The output from the application endpoint. - private string MergeRequest( LavaEndpointCache lavaEndpoint, LavaApplicationCache lavaApplication, Person currentPerson ) + private string MergeRequest( LavaEndpointCache lavaEndpoint, LavaApplicationCache lavaApplication, Person currentPerson, NameValueCollection localQueryParams ) { var mergeFields = LavaApplicationRequestHelpers.RequestToDictionary( HttpContext.Current.Request, currentPerson ); mergeFields.Add( "ConfigurationRigging", lavaApplication.ConfigurationRigging ); + // Add any local query params + if ( localQueryParams != null ) + { + var queryParams = ( Dictionary ) mergeFields["QueryString"]; + foreach ( string key in localQueryParams.AllKeys.Where( k => !k.IsNullOrWhiteSpace() ) ) + { + queryParams.AddOrReplace( key, localQueryParams[key] ); + } + mergeFields.AddOrReplace( "QueryString", queryParams ); + } + try { return lavaEndpoint.CodeTemplate.ResolveMergeFields(