Files
mapo-core/MP.SPEC/Extensions/NavigationManagerExtension.cs
T
2026-05-28 11:22:42 +02:00

93 lines
3.1 KiB
C#

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.WebUtilities;
using System.ComponentModel;
namespace MP.SPEC.Extensions
{
public static class NavigationManagerExtension
{
#region Public Methods
/// <summary>
/// Estensione metodo NavigationManager x recupero querystring int/string
///
/// https://code-maze.com/query-strings-blazor-webassembly/
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="navManager"></param>
/// <param name="key"></param>
/// <returns></returns>
public static T? ExtractQueryStringByKey<T>(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;
}
/// <summary>
/// Estensione metodo NavigationManager x recupero querystring di ogni tipo
///
/// es: navManager.ExtractQueryStringByKey<bool>("isAdmin")
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="navManager"></param>
/// <param name="key"></param>
/// <returns></returns>
public static T? ExtractQueryStringByKeyGeneric<T>(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;
}
}
/// <summary>
/// Recupero base page
///
/// https://stackoverflow.com/questions/50102726/navigationmanager-get-current-url-in-a-blazor-component
/// </summary>
/// <param name="navigation"></param>
/// <returns></returns>
public static string Page(this NavigationManager navigation)
{
return navigation.Uri.Substring(navigation.BaseUri.Length);
}
#endregion Public Methods
}
}