¿Cómo puedo crear una URL amigable en ASP.NET ¿MVC?


¿Cómo puedo generar URLs amigables dentro del ASP.NET ¿Marco MVC? Por ejemplo, tenemos una URL que se ve así:

http://site/catalogue/BrowseByStyleLevel/1

El 1 es Id del nivel de estudio (Más alto en este caso) para navegar, pero me gustaría reformatear la URL de la misma manera que lo hace StackOverflow.

Por ejemplo, estas dos URL te llevarán al mismo lugar:

Https://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

Https://stackoverflow.com/questions/119323 /

EDIT: La parte amigable de la url se conoce como slug.

Author: Community, 2008-10-20

3 answers

Hay dos pasos para resolver este problema. Primero, cree una nueva ruta o cambie la ruta predeterminada para aceptar un parámetro adicional:

routes.MapRoute(  "Default", // Route name
                   "{controller}/{action}/{id}/{ignoreThisBit}", 
                   new { controller = "Home", 
                         action = "Index", 
                         id = "",
                         ignoreThisBit = ""}  // Parameter defaults )

Ahora puede escribir lo que quiera al final de su URI y la aplicación lo ignorará.

Cuando renderice los enlaces, debe agregar el texto "amigable":

<%= Html.ActionLink("Link text", "ActionName", "ControllerName",
                    new { id = 1234, ignoreThisBit="friendly-text-here" });
 48
Author: Craig Stuntz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-20 13:15:29

Tienes una ruta en el global.asax

  routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = ""} 
                    // Parameter defaults )

Puedes definir tu propia ruta como:

Controller es la clase cs dentro de la carpeta controllers.

Puede definir su id - con el nombre que elija.

El sistema pasará el valor a su método ActionResult.

Puedes leer más sobre este paso aquí: http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

 1
Author: Moran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-20 10:20:53

Así es como he implementado la URL de slug en mi aplicación. Nota: El Maproute predeterminado no debe cambiarse y también las rutas se procesan en el orden en que se agregan a la lista de rutas.

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home",
          action = "Index",
          id = UrlParameter.Optional
    } // Parameter defaults
);
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" });
 1
Author: Hamid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-28 21:38:29