none
Ajuda com url amigavel RRS feed

  • Pergunta

  • Amigos Boa Noite.

    Primeiramente, antes de escrever o post procurei no forum e nada me ajudou.

    Tenho um e-commerce onde é necessario ter url rewrite, eu estava fazendo de um modo utilizando o global.asax como esta mostrando abaixo.

    HttpContext httpContext = HttpContext.Current;
            string sDefaultPath = Context.Request.Path;
    
            string[] arrDefaultPath = sDefaultPath.Split('/');
            //Listagem Produto da categoria
            if (arrDefaultPath.Length.Equals(6))
            {
                string image = arrDefaultPath[3];
                string image1 = arrDefaultPath[2];
                if (image1.ToLower() != "produto")
                {
                    if (image.ToLower() != "util")
                    {
                        if (image.ToLower() != "javascript")
                        {
                            if (image != "imagens")
                            {
                                if (image.ToLower() != "upload")
                                {
                                    string strIDCategoria = arrDefaultPath[3];
                                    string strIDSubCategoria = arrDefaultPath[4];
                                    httpContext.RewritePath(string.Format("~/Produto/Default.aspx?Cat={0}&Sub={1}", strIDCategoria, strIDSubCategoria));
                                }
                            }
                        }
                    }
                }
            }
            if (arrDefaultPath.Length.Equals(4))
            {
                string image = arrDefaultPath[2];
                if (image.ToLower() != "util")
                {
                    if (image.ToLower() != "cadastro")
                    {
                        if (image.ToLower() != "busca")
                        {
                            if (image.ToLower() != "carrinho")
                            {
                                if (image.ToLower() != "images")
                                {
                                    if (image.ToLower() != "faleconosco")
                                    {
                                        string strIDCategoria = arrDefaultPath[2];
                                        string strIDSubCategoria = "";
                                        httpContext.RewritePath(string.Format("~/Produto/Default.aspx?Cat={0}&Sub={1}", strIDCategoria, strIDSubCategoria));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            //Detalhe do Produto
            if (arrDefaultPath.Length.Equals(5))
            {
                string image = arrDefaultPath[2];
                if (image.ToLower() != "upload")
                {
                    if (image.ToLower() != "util")
                    {
                        string strIDProduto = arrDefaultPath[3];
                        httpContext.RewritePath(string.Format("~/Produto/ListaProduto.aspx?Prod={0}", strIDProduto));
                    }
                }
            }

    como podem ver são muitos if que tenho que fazer o que tornou o site extremamente lento e inviável.

    Procurei varios metedos na internet mais não conseguir compriender nenhum,e achei alguns outros que falam do uso do IIS, mais como eu faria esse pelo IIS se eu não tenho acesso ao iis da minha hospedagem?

    Preciso urgentemente conseguir fazer a url amigavel, o projeto está sendo feito em web form 3.5

    Obrigado e aguardo uma ajuda.


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    sábado, 16 de fevereiro de 2013 22:41

Respostas

  • Amigo,

    Você chegou a dar uma olhada nesse artigo?

    http://msdn.microsoft.com/en-us/library/ms972974.aspx

    Em relação ao acesso o IIS, se você não possui o acesso você pode solicitar para a empresa que hospeda e que gerencia o ISS fazer a modificação pra você.

    Em relação ao seu código poderia melhorar um pouquinho talvez ajudando na performace.

                String listaNegra;
                String[] arrDefaultPath = Context.Request.Path.Split('/');
    
                switch (arrDefaultPath.Length)
                {
                    case 4:
                        listaNegra = "util,cadastro,busca,carrinho,images,faleconosco";
                        if (!EstaNaListaNegra(arrDefaultPath[2].ToLower(), listaNegra))
                        {
                            HttpContext.Current.RewritePath(
                                String.Format("~/Produto/Default.aspx?Cat={0}&Sub={1}", arrDefaultPath[2], String.Empty)
                            );
                        }
                        break;
                    case 5: //Detalhe do Produto
                        listaNegra = "upload,util";
                        if (!EstaNaListaNegra(arrDefaultPath[2].ToLower(), listaNegra))
                        {
                            HttpContext.Current.RewritePath(
                                String.Format("~/Produto/ListaProduto.aspx?Prod={0}", arrDefaultPath[3])
                            );
                        }
                        break;
                    case 6: //Listagem Produto da categoria
                        listaNegra = "util,javascript,imagens,upload";
                        if (!EstaNaListaNegra(arrDefaultPath[3].ToLower(), listaNegra) && !arrDefaultPath[2].ToLower().Equals("produto"))
                        {
                            HttpContext.Current.RewritePath(
                                String.Format("~/Produto/Default.aspx?Cat={0}&Sub={1}", arrDefaultPath[3], arrDefaultPath[4])
                            );
                        }
                        break;
                }

            private Boolean EstaNaListaNegra(String nomeImage, String listaNegra)
            { 
                foreach (String nome in listaNegra.Split(','))
    	        {
    		        if (nomeImage.Equals(nome))
                    {
                        return true;
                    }
    	        }
                return false;
            }


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Sugerido como Resposta Rodrigo Sória quarta-feira, 20 de fevereiro de 2013 02:36
    • Marcado como Resposta Atila Rampazo terça-feira, 26 de fevereiro de 2013 13:53
    segunda-feira, 18 de fevereiro de 2013 02:37

Todas as Respostas

  • Amigo,

    Você chegou a dar uma olhada nesse artigo?

    http://msdn.microsoft.com/en-us/library/ms972974.aspx

    Em relação ao acesso o IIS, se você não possui o acesso você pode solicitar para a empresa que hospeda e que gerencia o ISS fazer a modificação pra você.

    Em relação ao seu código poderia melhorar um pouquinho talvez ajudando na performace.

                String listaNegra;
                String[] arrDefaultPath = Context.Request.Path.Split('/');
    
                switch (arrDefaultPath.Length)
                {
                    case 4:
                        listaNegra = "util,cadastro,busca,carrinho,images,faleconosco";
                        if (!EstaNaListaNegra(arrDefaultPath[2].ToLower(), listaNegra))
                        {
                            HttpContext.Current.RewritePath(
                                String.Format("~/Produto/Default.aspx?Cat={0}&Sub={1}", arrDefaultPath[2], String.Empty)
                            );
                        }
                        break;
                    case 5: //Detalhe do Produto
                        listaNegra = "upload,util";
                        if (!EstaNaListaNegra(arrDefaultPath[2].ToLower(), listaNegra))
                        {
                            HttpContext.Current.RewritePath(
                                String.Format("~/Produto/ListaProduto.aspx?Prod={0}", arrDefaultPath[3])
                            );
                        }
                        break;
                    case 6: //Listagem Produto da categoria
                        listaNegra = "util,javascript,imagens,upload";
                        if (!EstaNaListaNegra(arrDefaultPath[3].ToLower(), listaNegra) && !arrDefaultPath[2].ToLower().Equals("produto"))
                        {
                            HttpContext.Current.RewritePath(
                                String.Format("~/Produto/Default.aspx?Cat={0}&Sub={1}", arrDefaultPath[3], arrDefaultPath[4])
                            );
                        }
                        break;
                }

            private Boolean EstaNaListaNegra(String nomeImage, String listaNegra)
            { 
                foreach (String nome in listaNegra.Split(','))
    	        {
    		        if (nomeImage.Equals(nome))
                    {
                        return true;
                    }
    	        }
                return false;
            }


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Sugerido como Resposta Rodrigo Sória quarta-feira, 20 de fevereiro de 2013 02:36
    • Marcado como Resposta Atila Rampazo terça-feira, 26 de fevereiro de 2013 13:53
    segunda-feira, 18 de fevereiro de 2013 02:37
  • Rodrigo, Muito Obrigado!

    Acho que já dei uma olhada nesse, mais achei ele meio complicado de implementar, você conheçe algum modo mais prático, tentei fazer utilizando rotas no no global.asax, mais por algum motivo não funcionou, o outro modo que funcionou metade, que meche com o web.config porem nao consigo passar mais de 1 parametro utilizando & no web.config ele da erro.

    Quanto a sua solução vou estar implementando e vendo se o tempo de site diminui, pois demora muito para carregar.

    www.atilarampazo.com.br

    Se quiser dar uma olhada, mais ainda tem algumas falhas, pois devido a essa minha rewrite do global.asax eu tenho q mudar alguns caminhos de arquivos.


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    segunda-feira, 18 de fevereiro de 2013 13:29
  • Amigo,

    No global.asax seria para caso você precise fazer algum tratamento mais "complexo".

    Já no webconfig e bem simples como no exemplo abaixo:

    <?xml version="1.0"?>
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
        <urlMappings enabled="true">
          <add url="~/" mappedUrl="~/Pagina1.aspx" />
          <add url="~/Default.aspx?a=1&amp;b=2" mappedUrl="~/Pagina2.aspx" />
          <add url="~/Teste" mappedUrl="~/Pagina3.aspx" />
        </urlMappings>
      </system.web>
    </configuration>
    



    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Sugerido como Resposta Rodrigo Sória quarta-feira, 20 de fevereiro de 2013 02:36
    segunda-feira, 18 de fevereiro de 2013 21:59
  • Nesse caso do web.config seria so jogar isso no webconfig, e montar o link como eu quero, ou teria q utilizar alguma dll.

    Pois por exemplo, precisaria que fossem assim as url

    www.site.com.br/camisetas/8/bleach/2/

    ou

    www.site.com.br/camisetas/bleach/


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    segunda-feira, 18 de fevereiro de 2013 22:36
  • Amigo,

    Basta habilitar o urlmappings no webconfig mesmo e adicionar as url's que deseja.


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    segunda-feira, 18 de fevereiro de 2013 23:13
  • desse jeito do webconfig, nao preciso incluir dll nem fazer handlers? so incluir ele e montar o link ?

    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    segunda-feira, 18 de fevereiro de 2013 23:27
  • Amigo,

    Fiz o teste aqui e só coloquei o código acima que postei e funcionou, faça o teste você mesmo e veja se funciona.


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    terça-feira, 19 de fevereiro de 2013 02:25
  • Amigo,

    Obrigado pela ajuda, mais como estou meio sem tempo, eu utilizei a adaptação que você me forneceu para o global.asax e melhorou significativamente o desempenho do site.

    Depois com mais calma eu vejo algum rewrite que eu consiga intender.

    E da próxima vez, faço em 4.0 e não 3.5 rsrsrsr


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    terça-feira, 19 de fevereiro de 2013 02:46