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.
|