asp.net-mvc-4 url-rewriting slug

asp.net mvc 4 - MVC 4 creando url tipo slug



asp.net-mvc-4 url-rewriting (1)

Estoy tratando de crear un stackoverflow como url.

Yo el siguiente ejemplo funciona bien. Pero si elimino el controlador, se produce un error.

http://localhost:12719/Thread/Thread/500/slug-url-text

Tenga en cuenta que el primer hilo es el controlador, el segundo es la acción.

¿Cómo puedo hacer que la URL anterior se vea como la siguiente excluyendo el nombre del controlador de la url?

http://localhost:12719/Thread/500/slug-url-text

Mis rutas

public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("Default", // Route name "{controller}/{action}/{id}/{ignoreThisBit}", new { controller = "Home", action = "Index", id = "", ignoreThisBit = "" }); // Parameter defaults ) } }

Controlador de hilo

public class ThreadController : Controller { // // GET: /Thread/ public ActionResult Index() { string s = URLFriendly("slug-url-text"); string url = "Thread/" + 500 + "/" + s; return RedirectPermanent(url); } public ActionResult Thread(int id, string slug) { return View("Index"); }

}


Colocar la siguiente ruta antes de la definición de ruta predeterminada llamará directamente a la acción ''Subproceso'' en el controlador ''Subproceso'' con el parámetro ''id'' y ''slug''.

routes.MapRoute( name: "Thread", url: "Thread/{id}/{slug}", defaults: new { controller = "Thread", action = "Thread", slug = UrlParameter.Optional }, constraints: new { id = @"/d+" } );

Entonces, si realmente quieres que sea como , y asumes que alguien ingresa la parte id y no la parte slug,

public ActionResult Thread(int id, string slug) { if(string.IsNullOrEmpty(slug)){ slug = //Get the slug value from db with the given id return RedirectToRoute("Thread", new {id = id, slug = slug}); } return View(); }

espero que esto ayude.