Cómo: Definir una ruta

Actualización: noviembre 2007

Utilice el enrutamiento ASP.NET para controlar solicitudes URL que no se asignan a un archivo físico del sitio web. Cree una ruta definiendo un modelo para la dirección URL y especificando un controlador que se invoca en respuesta a la solicitud.

Al definir una ruta, puede especificar un valor predeterminado que se utilice si falta un parámetro en la solicitud URL. También puede especificar restricciones para asegurarse de que los parámetros contienen valores válidos.

Puede utilizar el enrutamiento para generar direcciones URL en la aplicación, por ejemplo crear dinámicamente direcciones URL para hipervínculos. Al construir una dirección URL, es posible que varias definiciones de ruta coincidan con los parámetros proporcionados. Puede especificar qué ruta desea utilizar para crear la dirección URL proporcionando el nombre de una ruta que se especificó al registrar la ruta.

Crear una ruta

Cree una ruta para compararla con un modelo de dirección URL y especifique cómo se controlan las solicitudes para dicho modelo de dirección URL.

Para crear una ruta

  1. Agregue un método al archivo Global.asax que crea una instancia de la clase Route. En el constructor de clase, establezca el parámetro url en el modelo de la dirección URL que se utiliza para comparar solicitudes URL, y establezca el parámetro routeHandler en una instancia de la clase que procesa la solicitud.

    Puede agregar un parámetro comodín al modelo de dirección URL si desea que una ruta corresponda a una solicitud URL aun cuando la solicitud incluya más parámetros que los definidos en la ruta. Para agregar un parámetro comodín, haga preceder el nombre del último parámetro de un asterisco (*).

  2. Si desea especificar valores predeterminados para los parámetros de ruta, establezca la propiedad Defaults.

  3. Si desea validar los valores de parámetro de la ruta, establezca la propiedad Constraints en uno de los siguientes valores:

    • Una cadena que define una expresión regular. La expresión regular no distingue entre mayúsculas y minúsculas.

    • Un objeto que implementa la interfaz IRouteConstaint y que incluye un método Match.

  4. Agregue el objeto Route a la propiedad Routes del objeto RouteTable. Si desea asignar un nombre a la ruta, llame al método Add; en caso contrario, llame al método Add.

  5. En el controlador Application_Start del archivo Global.asax, llame al método que agregó en el primer paso.

Ejemplo

El ejemplo siguiente muestra un método denominado RegisterRoutes al que se llama desde Application_Start en el archivo Global.asax. El método agrega dos objetos Route que tienen un parámetro de año y configuración regional. Al generar una dirección URL, las rutas se puede distinguir por un nombre. En este ejemplo se muestra cómo agregar estas rutas como rutas con nombre. Las rutas también tienen restricciones, valores predeterminados y un parámetro comodín.

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RegisterRoutes(RouteTable.Routes)
End Sub

Shared Sub RegisterRoutes(routes As RouteCollection)
    Dim salesUrlPattern As String
    Dim expensesUrlPattern As String
    Dim salesRoute As Route
    Dim expensesRoute As Route

    salesUrlPattern = "SalesReport/{locale}/{year}/{*queryvalues}"
    salesRoute = New Route(salesUrlPattern, New SalesRouteHandler)
    salesRoute.Constraints = New RouteValueDictionary(New With _
        {.locale = "[a-z]{2}-[a-z]{2}", .year = "\d{4}"})
    salesRoute.Defaults = New RouteValueDictionary(New With _
        {.locale = "en-US", .year = DateTime.Now.Year.ToString()})

    routes.Add("SalesRoute", salesRoute)

    expensesUrlPattern = "ExpensesReport/{locale}/{year}/{*queryvalues}"
    expensesRoute = New Route(expensesUrlPattern, New ExpensesRouteHandler)
    expensesRoute.Constraints = New RouteValueDictionary(New With _
        {.locale = "[a-z]{2}-[a-z]{2}", .year = "\d{4}"})
    expensesRoute.Defaults = New RouteValueDictionary(New With _
        {.locale = "en-US", .year = DateTime.Now.Year.ToString()})

    routes.Add("ExpensesRoute", expensesRoute)

End Sub
protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add("SalesRoute", new Route
    (
         "SalesReport/{locale}/{year}/{*queryvalues}"
         , new SalesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
    routes.Add("ExpensesRoute", new Route
    (
         "ExpensesReport/{locale}/{year}/{*queryvalues}"
         , new ExpensesRouteHandler()
    )
       {
          Constraints = new RouteValueDictionary 
          {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}},
          Defaults = new RouteValueDictionary 
           {{"locale", "en-US"}, {"year", DateTime.Now.Year.ToString()}}
       });
}

Vea también

Tareas

Cómo: Crear una dirección URL a partir de una ruta

Conceptos

Enrutamiento de ASP.NET