Compartir a través de


Crear rutas personalizadas (C#)

por Microsoft

Aprenda a agregar rutas personalizadas a una aplicación de ASP.NET MVC. En este tutorial, aprenderá a modificar la tabla de rutas predeterminada en el archivo Global.asax.

En este tutorial, aprenderá a agregar una ruta personalizada a una aplicación ASP.NET MVC. Aprenderá a modificar la tabla de rutas predeterminada en el archivo Global.asax con una ruta personalizada.

Para muchas aplicaciones de ASP.NET MVC sencillas, la tabla de rutas predeterminada funcionará bien. Sin embargo, es posible que descubra que tiene necesidades de enrutamiento especializadas. En ese caso, puede crear una ruta personalizada.

Imagine, por ejemplo, que está compilando una aplicación de blog. Es posible que quiera manipular las solicitudes entrantes que tienen este aspecto:

/Archive/12-25-2009

Cuando un usuario escribe esta solicitud, quiere devolver la entrada de blog correspondiente a la fecha 25/12/2009. Para manipular este tipo de solicitud, debe crear una ruta personalizada.

El archivo Global.asax de la lista 1 contiene una nueva ruta personalizada, denominada Blog, que controla las solicitudes que tienen un aspecto similar a /Archive/fecha de entrada.

Listado 1: Global.asax (con ruta personalizada)

using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Blog",                                           // Route name
                "Archive/{entryDate}",                            // URL with parameters
                new { controller = "Archive", action = "Entry" }  // Parameter defaults
            );
            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }
        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

El orden de las rutas que agregue a la tabla de rutas es importante. Nuestra nueva ruta de blog personalizada se agrega antes de la ruta predeterminada existente. Si ha invertido el orden, siempre se llamará a la ruta predeterminada en lugar de la ruta personalizada.

La ruta de blog personalizada coincide con cualquier solicitud que comience por /Archive/. Por lo tanto, coincide con todas las direcciones URL siguientes:

  • /Archive/12-25-2009

  • /Archive/10-6-2004

  • /Archive/apple

La ruta personalizada asigna la solicitud entrante a un controlador denominado Archive e invoca la acción Entry(). Cuando se llama al método Entry(), la fecha de entrada se pasa como un parámetro denominado entryDate.

Puede usar la ruta personalizada blog con el controlador en la lista 2.

Lista 2 - ArchiveController.cs

using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class ArchiveController : Controller
    {
        public string Entry(DateTime entryDate)
        {
            return "You requested the entry from " + entryDate.ToString();
        }
    }
}

Observe que el método Entry() de la lista 2 acepta un parámetro de tipo DateTime. El marco MVC es lo suficientemente inteligente como para convertir automáticamente la fecha de entrada de la dirección URL en un valor DateTime. Si el parámetro de fecha de entrada de la dirección URL no se puede convertir en DateTime, se genera un error (vea la figura 1).

Figura 1: Error al convertir el parámetro

The New Project dialog box

Figura 01: Error al convertir el parámetro (Haga clic para ver la imagen de tamaño completo)

Resumen

El objetivo de este tutorial era demostrar cómo puede crear una ruta personalizada. Ha aprendido a agregar una ruta personalizada a la tabla de rutas en el archivo Global.asax que representa entradas de blog. Hemos analizado cómo asignar solicitudes de entradas de blog a un controlador denominado ArchiveController y una acción de controlador denominada Entry().