Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 16017|Respuesta: 1

[.NET Core] ASP.NET Implementación de restricciones de enrutamiento personalizadas en Core

[Copiar enlace]
Publicado en 6/5/2019 9:30:30 | | |
Restricciones de enrutamiento

ASP.NET Core, puedes pasar variables sobre URLs definiendo plantillas de enrutamiento, y puedes proporcionar valores predeterminados, opcionales y restricciones para variables.

La restricción se utiliza añadiendo el nombre especificado de la restricción a la ruta de los atributos, que se utiliza de la siguiente manera:

Algunas restricciones ya están previstas dentro del marco, como sigue:

Restricciones
ejemplo
Ejemplos de partidos
ilustrar
int
{id:int}
123456789, -123456789
Coincidir con cualquier entero
bool
{active:bool}
cierto, FALSO
Coincidir con verdadero o falso (sensible a mayúsculas y mayúsculas)
Fecha y hora
{fecha de nacimiento:data}
31-12-2016, 31-12-2016 19:32
Coincide con valores válidos de FechaHora (en localidad fija - véase advertencia)
decimal
{precio:decimal}
49.99, -1,000.01
Coincide con valores decimales válidos (en localidad fija - véase advertencia)
Doble
{peso:doble}
1.234, -1.001.01e8
Coincide con valores dobles válidos (en localidad fija - véase advertencia)
Flotador
{peso:flotador}
1.234, -1.001.01e8
Coincide con valores de flotación válidos (en localidad fija - véase advertencias)
Guid
{id:guid}
CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638}
Coincide con valores GUID válidos
largo
{tics:long}
123456789, -123456789
Coincidencias válidas con valores largos
minlength(value)
{nombre de usuario:minlength(4)}
Rick
La cadena debe tener al menos 4 caracteres
maxlength(value)
{nombre de archivo:maxlength(8)}
Richard
Las cadenas no deben superar los 8 caracteres
Longitud(longitud)
{nombre de archivo:longitud(12)}
somefile.txt
La cadena debe tener exactamente 12 caracteres
Longitud(min,max)
{nombre de archivo:longitud(8,16)}
somefile.txt
La cadena debe tener al menos 8 caracteres y no más de 16 caracteres
min(valor)
{edad:min(18)}
19
El valor entero debe ser al menos 18
max(valor)
{edad:max(120)}
91
El valor entero no debe superar 120
Alcance (mínimo, máximo)
{edad:rango(18,120)}
91
El valor entero debe ser al menos 18 y no superar 120
Alfa
{nombre:alfa}
Rick
La cadena debe estar formada por uno o más caracteres alfabéticos (de la a a la z, con diferencia de mayúsculas y mayúsculas).
regex(expresión)
{ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)}
123-45-6789
La cadena debe coincidir con la expresión regular (véanse consejos para definir expresiones regulares)
Obligatorio
{nombre:requerido}
Rick
Se utiliza para imponer la presencia de valores no paramétricos durante la generación de URLs


Las restricciones integradas funcionan para la mayoría de los casos de uso comunes, pero a veces aún necesitamos personalizar el efecto que queremos.
Restricciones de enrutamiento personalizadas

Una restricción personalizada consiste en implementar la interfaz IRouteConstraint y luego sobrecargar el método Match, que tiene cuatro parámetros.

El primer parámetro, httpContext, es el contexto de la solicitud actual

El segundo parámetro, ruta, es la ruta a la que pertenece la restricción actual

El tercer parámetro, routeKey, es el nombre de la variable actualmente comprobada, como id en el ejemplo al principio del artículo
El cuarto valor de parámetro es el valor del diccionario que coincide con la URL actual, como la ruta del ejemplo al principio del artículo; si la URL es users/1, entonces existe un diccionario con clave = id , valor = 1. Por supuesto, también hay valores para otras variables, como controlador, acción, etc.

El quinto parámetro, routeDirection, es un valor enumerado que representa si la URL es solicitada por la web o generada por un método como Url.Action.

Por ejemplo, queremos definir una restricción que especifique que los parámetros que pasa la ruta deben ser el valor de enumeración especificado.

Definamos primero un enum:


Entonces se definen las restricciones:

Añadir restricciones personalizadas al método ConfigureServices en Startup.cs:
Uso de restricciones en las rutas:

(WebApplicationTest es el espacio de nombres actual)


{id:int:min(2)} debe usar min(2), de lo contrario habrá un conflicto por id = 0 o id = 1.

Ejecuta el programa y ajusta nuestras restricciones personalizadas cuando las rutas sean api/test/0, api/test/1, api/test/true y api/test/false.

Si la ruta es api/test/{entero mayor que 2}, coincide con la segunda ruta.

Otros casos coinciden con la tercera vía.

conclusión

Las restricciones de enrutamiento son una característica muy útil en algunos escenarios, que pueden reducir los parámetros de comprobación en el controlador, y la función de validación parcial de parámetros puede implementarse usando attruibite declarativo, y algunas comprobaciones duplicadas pueden extraerse en restricciones para uso público.

El constructor de restricción puede ser inyectado, por lo que puede ser muy extensible, y se puede hacer cierta verificación de parámetros consultando la base de datos.

La página web oficial solo menciona brevemente las restricciones de enrutamiento, y este artículo ofrece ejemplos específicos del uso de restricciones de enrutamiento.





Anterior:Zero Foundation C# (Versión a todo color) Tecnología Tomorrow
Próximo:ASP.NET Core – Descripción de uso de la importación de Razor View
 Propietario| Publicado en 6/5/2019 9:32:15 |
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com