Roteamento de Atributo em MVC 5
Antes do MVC 5, você podia mapear URLs para ações e controladores específicos chamando routes.MapRoute(...)
o arquivo RouteConfig.cs. É aqui que o url da página inicial é armazenado ( Home/Index
). No entanto, se você modificar a rota padrão conforme mostrado abaixo,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
tenha em mente que isso afetará os URLs de outras ações e controladores. Por exemplo, se você tiver uma classe de controlador nomeada ExampleController
e um método de ação dentro dela chamado DoSomething
, então o url padrão esperado ExampleController/DoSomething
não funcionará mais porque a rota padrão foi alterada.
Uma solução alternativa para isso é não mexer com a rota padrão e criar novas rotas no arquivo RouteConfig.cs para outras ações e controladores como este,
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 }
);
Agora a DoSomething
ação da ExampleController
classe será mapeada para a url hey/now
. Mas isso pode ser entediante para cada vez que você deseja definir rotas para ações diferentes. Então, no MVC 5 você pode agora adicionar atributos para combinar urls com ações como,
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();
}
}