Nel precedente script abbiamo esaminato gli Spatial Types di SQL Server, allo scopo di rappresentare meglio le nostre entità su mappe e di migliorarne la ricerca geografica.
Nel momento in cui riceviamo dal client una stringa nel formato Well-Known Text (https://it.wikipedia.org/wiki/Well-Known_Text]), avremo la necessità di convertirla in un oggetto di tipo DbGeography, affinché lo si possa utilizzare direttamente in una delle nostre query LINQ to Entities.
Per evitare di ripetere più volte la logica di costruzione, realizziamo un Model Binder personalizzato. Iniziamo scrivendo una classe che implementi l'interfaccia System.Web.Mvc.IModelBinder.
public class DbGeographyModelBinder : IModelBinder
{
public bool BindModel(
ModelBindingExecutionContext modelBindingExecutionContext,
ModelBindingContext bindingContext)
{
var values = bindingContext.ValueProvider.GetValue(
bindingContext.ModelName);
var rawValue = (string)values.RawValue;
try
{
//Costruiamo l'oggetto usando il sistema geodetico WGS84
bindingContext.Model = DbGeography.FromText(rawValue, 4326);
return true;
}
catch
{
return false;
}
}
}Ora che abbiamo a disposizione questa classe, possiamo indicarne il tipo in combinazione con il ModelBinderAttribute per annotare i parametri delle action di un'applicazione ASP.NET MVC.
public async Task<ActionResult> CercaComuni(
[ModelBinder(typeof(DbGeographyModelBinder))] DbGeography forma){
//Qui ricerca geografica
}Il client potrà così invocare questa action fornendo la stringa Well-Known Text via querystring, nel modo seguente:
http://hostname/NomeController/CercaComuni?forma=POINT(12.4833 41.9)
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Modificare lo stile in una QuickGrid Blazor
Lockfiles per le GitHub Actions
Analizzare la qualità delle risposte con Microsoft Foundry
Utilizzo del persistent state di Blazor nel prerendering
Stop alle password con Azure Managed Identity
Utilizzare noopener e noreferrer nei link HTML
Validare gli output dell'AI con Microsoft.Extensions.AI in ASP.NET Core
Importare un servizio esterno in .NET Aspire
Gestione delle issue type con GitHub
Raggruppare risorse in .NET Aspire
Testare le API di Azure Resource Manager con API Playground
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


