using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.WebUtilities; using System.ComponentModel; namespace MP.SPEC.Extensions { public static class NavigationManagerExtension { #region Public Methods /// /// Estensione metodo NavigationManager x recupero querystring int/string /// /// https://code-maze.com/query-strings-blazor-webassembly/ /// /// /// /// /// public static T? ExtractQueryStringByKey(this NavigationManager navManager, string key) { var uri = navManager.ToAbsoluteUri(navManager.Uri); QueryHelpers.ParseQuery(uri.Query) .TryGetValue(key, out var queryValue); if (typeof(T).Equals(typeof(int))) { int.TryParse(queryValue, out int result); return (T)(object)result; } if (typeof(T).Equals(typeof(string))) return (T)(object)queryValue.ToString(); return default; } /// /// Estensione metodo NavigationManager x recupero querystring di ogni tipo /// /// es: navManager.ExtractQueryStringByKey("isAdmin") /// /// /// /// /// public static T? ExtractQueryStringByKeyGeneric(this NavigationManager navManager, string key) { var uri = navManager.ToAbsoluteUri(navManager.Uri); // Estrai il valore associato alla chiave if (!QueryHelpers.ParseQuery(uri.Query).TryGetValue(key, out var queryValue)) { return default; } var stringValue = queryValue.ToString(); try { // Ottieni il convertitore dinamico per il tipo T var converter = TypeDescriptor.GetConverter(typeof(T)); if (converter != null && converter.CanConvertFrom(typeof(string))) { return (T?)converter.ConvertFromString(stringValue); } // Fallback nel caso il convertitore standard non basti return (T?)Convert.ChangeType(stringValue, typeof(T)); } catch { // Se la conversione fallisce (es. il testo non è un numero valido), ritorna il default return default; } } /// /// Recupero base page /// /// https://stackoverflow.com/questions/50102726/navigationmanager-get-current-url-in-a-blazor-component /// /// /// public static string Page(this NavigationManager navigation) { return navigation.Uri.Substring(navigation.BaseUri.Length); } #endregion Public Methods } }