Rotas MVC Problem
-
13-09-2019 - |
Pergunta
Eu li um monte de post, e eu não ver meu mystake.
Pode algum corpo ajuda me agradar.
Não é meu global
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute("UserName", "Account/{action}/{username}",
new { action = "EditProfile", controller = "Account" });
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
Quando eu uso
<%= Html.ActionLink("Edit Account", "EditProfile", "Account", new { username = Html.Encode(Page.User.Identity.Name) },null) %>
Eu tenho esse url
http: // localhost: 8458 / Conta / EditProfile username = cboivin
Se eu tentar chamar a url diretamente como http: // localhost: 8458 / Conta / EditProfile / cboivin
Não trabalho para ...
Não é o meu método na minha AccountController
public ActionResult EditProfile(string username)
{
return View(ServiceFactory.UserAccount.GetUserByUserName(new GetUserByUserNameArgs(username)));
}
Eu não sei onde está o meu erro. Alguém pode me ajudar ? Obrigado.
Solução
Rotas são lidas de cima para baixo, o seu "pegar todas as" necessidades de rota geral para ser o último.
routes.MapRoute("UserName", "Account/{action}/{username}",
new { action = "EditProfile", controller = "Account" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Outras dicas
Tente remover:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
E lembre-se rotas mais gerais devem estar no fundo de sua tabela de roteamento, enquanto as rotas mais específicas devem vir na parte superior.