Enrutamiento de atributos en MVC 5
Antes de MVC 5, podía asignar URL a acciones y controladores específicos llamando routes.MapRoute(...)
al archivo RouteConfig.cs. Aquí es donde se almacena la URL de la página de inicio ( Home/Index
). Sin embargo, si modifica la ruta predeterminada como se muestra a continuación,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
tenga en cuenta que esto afectará las URL de otras acciones y controladores. Por ejemplo, si tenía una clase de controlador nombrada ExampleController
y un método de acción dentro de ella llamado DoSomething
, entonces la URL predeterminada esperada ExampleController/DoSomething
ya no funcionará porque se cambió la ruta predeterminada.
Una solución para esto es no meterse con la ruta predeterminada y crear nuevas rutas en el archivo RouteConfig.cs para otras acciones y controladores como ese,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Example",
url: "hey/now",
defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);
Ahora, la DoSomething
acción de la ExampleController
clase se asignará a la URL hey/now
. Pero esto puede resultar tedioso cada vez que desee definir rutas para diferentes acciones. Entonces, en MVC 5 ahora puede agregar atributos para hacer coincidir las URL con acciones como esta,
public class HomeController : Controller
{
// url is now 'index/' instead of 'home/index'
[Route("index")]
public ActionResult Index()
{
return View();
}
// url is now 'create/new' instead of 'home/create'
[Route("create/new")]
public ActionResult Create()
{
return View();
}
}