Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
por Stephen Walther
En este tutorial, Stephen Walther demuestra cómo puede controlar la forma en que las solicitudes de los exploradores hacen coincidir las rutas mediante la creación de restricciones de ruta con expresiones regulares.
Las restricciones de ruta se usan para restringir las solicitudes del explorador que coinciden con una ruta determinada. Puede usar una expresión regular para especificar una restricción de ruta.
Por ejemplo, imagine que ha definido la ruta en la lista 1 del archivo Global.asax.
Lista 1: Global.asax.vb
routes.MapRoute( _
"Product", _
"Product/{productId}", _
New With {.controller = "Product", .action = "Details"} _
)
La lista 1 contiene una ruta denominada Product. Puede usar la ruta Product para asignar solicitudes del explorador al ProductController incluido en la lista 2.
Lista 2: Controllers\ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
Function Details(ByVal productId As Integer) As ActionResult
Return View()
End Function
End Class
Observe que la acción Details() expuesta por el controlador de producto acepta un único parámetro denominado productId. Este parámetro es un parámetro entero.
La ruta definida en la lista 1 coincidirá con cualquiera de las siguientes direcciones URL:
- /Product/23
- /Product/7
Desafortunadamente, la ruta también coincidirá con las siguientes direcciones URL:
- /Product/blah
- /Product/apple
Dado que la acción Details() espera un parámetro entero, la realización de una solicitud que contenga algo distinto de un valor entero provocará un error. Por ejemplo, si escribe la dirección URL /Product/apple en el explorador, obtendrá la página de error de la figura 1.
Figura 01: Ver una explosión de página (haga clic para ver la imagen de tamaño completo)
Lo que realmente quiere hacer es solo coincidir con las URL que contengan un productId entero correcto. Puede usar una restricción al definir una ruta para restringir las direcciones URL que coinciden con la ruta. La ruta Product modificada de la lista 3 contiene una restricción de expresión regular que solo coincide con enteros.
Lista 3: Global.asax.vb
routes.MapRoute( _
"Product", _
"Product/{productId}", _
New With {.controller = "Product", .action = "Details"}, _
New With {.productId = "\d+"} _
)
La expresión regular \d+ coincide con uno o varios enteros. Esta restricción hace que la ruta Product coincida con las siguientes direcciones URL:
- /Product/3
- /Product/8999
Pero no las siguientes direcciones URL:
- /Product/apple
- /Product
Estas solicitudes del explorador se controlarán mediante otra ruta o, si no hay rutas coincidentes, se devolverá un error El recurso no se encontró.