Usuário com melhor resposta
Ajuda com url amigavel

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 é
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
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
-
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 é
-
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&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
-
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 é
-
-
-
-
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 é