El enrutamiento convencional es el sistema tradicional de mapeo de URLs en ASP.NET que utiliza patrones predefinidos para determinar qué controlador y acción deben manejar una solicitud HTTP específica.
El enrutamiento convencional establece reglas globales que se aplican a toda la aplicación, generalmente en Program.cs (o Startup.cs en versiones anteriores).
Aunque las APIs mínimas y el routing por atributos son más comunes en proyectos modernos, aún os podéis encontrar routing convencional en aplicaciones grandes o en migraciones desde versiones anteriores.
Y es bastante horrible así que si podéis no tener que usarlo, mejor que mejor. Pero por si os toca, vamos a ello 👇
¿Cómo funciona el Routing Convencional?
El enrutamiento convencional se basa en convenciones predecibles que siguen el patrón estándar de {controller}/{action}/{id?}.
Este enfoque permite que ASP.NET mapee automáticamente las URLs a los controladores y acciones correspondientes sin necesidad de configuración adicional en cada método.
Las rutas convencionales siguen un patrón de URL con este formato:
"{controller=Home}/{action=Index}/{id?}"Esto significa:
controller: el nombre del controlador (por defecto esHome).action: el método dentro del controlador (por defecto esIndex).id?: parámetro opcional que se puede usar como identificador.
Configurando el enrutamiento convencional
Los patrones de enrutamiento se aplican usando métodos como MapControllerRoute o MapDefaultControllerRoute.
Vamos a verlo como se aplicaría el routing convencional con un ejemplo sencillo,
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews(); // Habilita MVC
var app = builder.Build();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();public class ProductsController : Controller
{
public IActionResult Details(int id)
{
// Aquí iría la lógica para obtener el producto con ese id
return Content($"Mostrando el producto con ID = {id}");
}
}Con esta configuración,
- Ua URL como
/Products/Details/5se mapeará al controladorProductsController - Acción
Details, - Se le pasará el valor
5como parámetroid.
Routing avanzado
Por supuesto, al igual que con el routing por atributos, es posible realizar sistemas de routing más avanzado, si lo necesita nuestro proyecto.
Vamos a ver algunos de ellos.
Ruta con controlador fijo
app.MapControllerRoute(
name: "blog",
pattern: "blog/{action}/{id?}",
defaults: new { controller = "Blog" });Aquí, cualquier ruta que comience con /blog siempre se dirigirá al BlogController, con la acción y el id como parte dinámica.
Ruta con múltiples parámetros
app.MapControllerRoute(
name: "blogPost",
pattern: "blog/{year}/{month}/{day}",
defaults: new { controller = "Blog", action = "Post" });Una URL como /blog/2023/10/05 se dirigirá a BlogController.Post(int year, int month, int day) con los parámetros correspondientes.