t

Comentários recentes

Hífen em URL com ASP.NET MVC

Postado por Daniel Fonseca Castro - Tuesday, October 06, 2009 9:23 AM

Recentemente recebi a seguinte solicitação de um cliente “Todas as URLs que conter palavras composta devem ser separas por hífen”, basicamente o cliente queria que as URLs que estavam definidas desta forma http:// dominiodosite /registerlogin ficassem desta forma http://dominiodosite/register-login , note que o padrão de rotas em ASP.NET MVC é http://dominiodosite/nomeController/nomedaaction/[id] e o que o cliente quer é http://dominiodosite/nome-da-action/ ,essa regra também é valida para as URLs que tem o nome do Controller e palavras composta na Action , por exemplo :http://dominiodosite/nomeController/nome-da-action/.

Para solucionar esse problema tive que adicionar novas rotas para as URLs sem o nome do Controller e com palavras composta , e para as URLs que tem o nome do Controller simplesmente decorei as Actions com o atributo ActionName, veja as soluções encontradas abaixo:

- URLs sem o nome do Controller

O primeiro passo foi adicionar novas rota veja como ficou o Global.asax abaixo:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    routes.MapRoute(
       "RouteRegisterLogin",
       "register-login",
       new { controller = "RegisterLogin", action = "Index" }
    );

    routes.MapRoute(
      "Default","{controller}/{action}/{id}",                                   
       new { controller = "Home", action = "Index", id = "" }  
    );
}

A “RouteRegisterLogin” redireciona a solicitação para o Controller “RegisterLogin” e para Action “Index” toda vez que a URL conter “register-login” após o dominio. Por exemplo: http://dominiodosite/register-login.

Note que não configurei a possibilidade de passagem de parâmetros , mais você poderia fazer essa configuração caso seja necessário.

O Controller não sobreu nenhum alteração, veja o código abaixo:

public class RegisterLoginController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

- URLs com o nome do Controller

Para as URLs com o nome do Controller e palavras compostas no nome da action a solução é mais simples como já mencionei basta utilizar o atributo ActionName nas actions afetadas.Por exemplo para alterar a Url http://dominiodosite/blog/novopost para http://dominiodosite/blog/novo-post basta adicionar o atributo na Action "NovoPost" do Controller "Admin" como o exemplo abaixo:

public class AdminController : Controller
{
    
    [ActionName ("novo-post") ]
    public ActionResult NovoPost()
    {
        return View("~/Views/Admin/novo-post.aspx");
    }
}

Encontrei essas soluções para o meu problema em particular, no meu caso não foi definido nada antes do inicio do projeto por isso não deu para definir um padrão para todo o site e as duas soluções acima apresentadas resolveram o meu problema, o ideal seria definir esse tipo de coisa antes de iniciar o projeto assim as solução seria menos traumática ,se você enxergar outra solução para esse problema adicione seu comentário!

Daniel Fonseca Castro

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories: ASP.NET MVC

Related posts

Add comment


 

  Country flag