93 lines
3.1 KiB
C#
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
|
|
}
|
|
}
|