Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 16017|Risposta: 1

[.NET Core] ASP.NET Implementazione di vincoli di routing personalizzati in Core

[Copiato link]
Pubblicato su 06/05/2019 09:30:30 | | |
Vincoli di instradamento

ASP.NET Core, puoi passare variabili sugli URL definendo template di routing, e puoi fornire valori predefiniti, opzionali e vincoli per le variabili.

Il vincolo viene usato aggiungendo il nome specificato del vincolo alla rotta attributi, che viene usata come segue:

Alcuni vincoli sono già previsti all'interno del framework, come segue:

Vincoli
esempio
Esempi di partite
illustrare
int
{id:int}
123456789, -123456789
Abbina qualsiasi intero
bool
{active:bool}
vero, FALSO
Corrispondi a veri o falsi (maiuscole distinti)
data
{data di nascita}
31-12-2016, 31-12-2016 19:32
Corrisponde ai valori validi di DateTime (in località fissa - vedi avviso)
decimale
{prezzo:decimale}
49.99, -1,000.01
Corrisponde ai valori decimali validi (in località fissa - vedi avviso)
Doppio
{peso:doppio}
1.234, -1.001.01e8
Corrisponde ai valori doppi validi (in località fissa - vedi avvertimento)
Carro
{peso:galleggiare}
1.234, -1.001.01e8
Corrisponde ai valori validi dei float (in località fissa - vedi avvisi)
Guid
{id:guid}
CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638}
Corrisponde ai valori validi del GUID
lunga
{tic:lungo}
123456789, -123456789
Corrisponde a valori lunghi validi
minlength(value)
{username:minlength(4)}
Rick
La stringa deve essere composta da almeno 4 caratteri
maxlength(value)
{Nome File:MaxLong(8)}
Richard
Le stringhe non devono superare 8 caratteri
Lunghezza(lunghezza)
{filename:length(12)}
somefile.txt
La stringa deve essere esattamente di 12 caratteri
Lunghezza(min,max)
{filename:length(8,16)}
somefile.txt
La stringa deve essere composta da almeno 8 caratteri e non più di 16 caratteri
min(valore)
{età:min(18)}
19
Il valore intero deve essere almeno 18
max(valore)
{age:max(120)}
91
Il valore intero non deve superare 120
Autonomia (minimo, massimo)
{età:raggio(18,120)}
91
Il valore intero deve essere almeno 18 e non superare 120
Alpha
{name:alpha}
Rick
La stringa deve essere composta da uno o più caratteri alfabetici (a-z, con la distinzione tra maiuscole e minusco).
regex(espressione)
{ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)}
123-45-6789
La stringa deve corrispondere all'espressione regolare (vedi consigli per definire le espressioni regolari)
Obbligatorio
{name:required}
Rick
Utilizzato per imporre la presenza di valori non parametrici durante la generazione degli URL


I vincoli integrati funzionano per la maggior parte dei casi d'uso comuni, ma a volte dobbiamo comunque personalizzare l'effetto desiderato.
Vincoli di routing personalizzati

Un vincolo personalizzato consiste nell'implementare l'interfaccia IRouteConstraint e poi sovraccaricare il metodo Match, che ha quattro parametri.

Il primo parametro, httpContext, è il contesto della richiesta corrente

Il secondo parametro, route, è la route a cui appartiene il vincolo corrente

Il terzo parametro, routeKey, è il nome della variabile attualmente controllata, come id nell'esempio all'inizio dell'articolo
Il quarto parametro è il valore del dizionario che corrisponde all'URL corrente, come la rotta dell'esempio all'inizio dell'articolo; se l'URL è user/1, allora esiste un dizionario con chiave = id , valore = 1. Naturalmente, ci sono anche valori per altre variabili, come controller, action, ecc.

Il quinto parametro, routeDirection, è un valore enumerato che rappresenta se l'URL è richiesto dal web o generato da un metodo come Url.Action.

Ad esempio, vogliamo definire un vincolo che specifichi che i parametri passati dalla route devono essere il valore di enumerazione specificato.

Definiamo prima un enum:


Poi definisci i vincoli:

Aggiungi vincoli personalizzati al metodo ConfigureServices in Startup.cs:
Uso dei vincoli sui percorsi:

(WebApplicationTest è lo spazio di nomi attuale)


{id:int:min(2)} deve usare min(2), altrimenti ci sarà un conflitto per id = 0 o id = 1.

Esegui il programma e abbina i nostri vincoli personalizzati quando le rotte sono api/test/0, api/test/1, api/test/true e api/test/false.

Se la route è api/test/{integer maggiore di 2}, abbina la seconda route.

Altri casi corrispondono al terzo percorso.

conclusione

I vincoli di routing sono una caratteristica molto utile in alcuni scenari, che possono ridurre i parametri di controllo nel controller, e la funzione di validazione parziale dei parametri può essere implementata usando l'attuibite dichiarativo, e alcuni duplicati check possono essere estratti in vincoli per uso pubblico.

Il costruttore di vincolo può essere iniettato, quindi può essere molto estensibile, e una verifica dei parametri può essere effettuata interrogando il database.

Il sito ufficiale menziona solo brevemente i vincoli di instradamento, e questo articolo fornisce esempi specifici dell'uso dei vincoli di instradamento.





Precedente:Zero Foundation C# (Versione a colori) Tecnologia Tomorrow
Prossimo:ASP.NET Core – Descrizione dell'Utilizzo dell'Importazione Vista Razor
 Padrone di casa| Pubblicato su 06/05/2019 09:32:15 |
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com