Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, bom dia.
Refiz um site que estava em ASP Clássico para .Net e agora estou tendo problemas com URLs propagadas pela internet, pois elas deixaram de existir.
Estou tentando fazer com que as URLs antigas redirecionem para as novas criando uma nova rota, mas não estou conseguindo.
No site antigo, eu tinha essas URLs, por exemplo:
http://www.emocioneja.com.br/categoria-77-gospel-religiosa.html
http://www.emocioneja.com.br/categoria-66-amor-romantica.html
http://www.emocioneja.com.br/categoria-55-aniversario.html
No novo, para acessar os mesmos locais, as URLs são:
http://emocioneja.com.br/Telemensagem/Categoria/77/gospel-religiosa
http://emocioneja.com.br/Telemensagem/Categoria/66/amor-romantica
http://emocioneja.com.br/Telemensagem/Categoria/55/aniversarios
Tentei criar minha rota conforme código abaixo, mas sem sucesso:
routes.MapRoute(
"Site Antigo",
"categoria-{id}-{descricao}.html",
new { controller = "Telemensagem", action = "Categoria" }
);
Alguém sabe se é possível eu fazer isso, mesmo a URL antiga terminando em .html e se sim, como faço?
Obrigado.
Obrigado, mas não rolou não...
Mesmo erro:
HTTP Error 404.0 - Not Found O recurso que você está procurando foi removido, teve o seu nome alterado ou está temporariamente indisponível.
Cara, consegui aqui, com mais testes.
Rota:
routes.MapRoute(
"SiteAntigo",
"{page}",
new { controller = "Telemensagem", action = "Categoria" }
);
E coloca ela, em cima da rota padrão, pra ela ficar com prioridade.
No WebConfig:
<system.webServer>
<handlers>
<add name="ManagedDllExtension"
path="*.html"
verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>public ActionResult Categoria(string page)
O parâmetro page vai vir com o nome da página, categoria-77-gospel-religiosa.html, por exemplo.ai vai ter que separar pra pegar o id e a descrição.
Aqui não deu certo não, mas já tinha coisas no handlers do meu web.config, não sei se isso que pode ter interferido.
Ficou assim:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*."
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ManagedDllExtension"
path="*.html"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>Deixa assim:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*.*"
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>Assim é como já estava antes, e não funciona o HTML.
Só uma coisa que eu percebi que estava fazendo errado, era que eu estava criando a rota no arquivo global.asax, então nada dava certo.
Editei no arquivo RouteConfig.cs e passou a funcionar (sem o html).
Agora só falta mesmo fazer funcionar com o .html
Tem mais alguma sugestão? hehe...
Vlw...
Estava assim:
path="*."
Deixe essa linha assim:
path="."
Cara, deu tudo certo, muito obrigado. O principal erro que eu estava cometendo realmente era o arquivo (global.asax), pois mesmo quando eu fazia as configurações certas que você passou, não dava certo.
Resultado final:
RouteConfig.cs:
routes.MapRoute("CategoriaSiteAntigo",
"categoria-{page}.html",
new { controller = "Telemensagem", action = "CategoriaSiteAntigo", page = UrlParameter.Optional }
);
routes.MapRoute("TelemensagemSiteAntigo",
"telemensagem-{page}.html",
new { controller = "Telemensagem", action = "TelemensagemSiteAntigo", page = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{descricao}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, descricao = UrlParameter.Optional }
);
TelemensagemController.cs:
public ActionResult CategoriaSiteAntigo(string page)
{
int idCategoria = int.Parse(page.Substring(0, page.IndexOf("-")));
string descricao = page.Substring(page.IndexOf("-") + 1);
return RedirectToAction("Categoria", new { id = idCategoria, descricao = descricao });
}
public ActionResult TelemensagemSiteAntigo(string page)
{
int idTelemensagem = int.Parse(page.Substring(0, page.IndexOf("-")));
string descricao = page.Substring(page.IndexOf("-") + 1);
return RedirectToAction("Detalhes", new { id = idTelemensagem, descricao = descricao });
}
Web.config
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*.*"
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
Brigadão, Deus lhe abençoe!
Precisei fazer mais uma alteração. Local funcionou o web.config dessa forma, mas a hora que exportei para a azure só funcionou as páginas que terminam com uma extensão (por exemplo .html).
Então deixai dessa forma e funcionou:
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*."
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="ManagedDllExtension"
path="*.html"
verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>Boa :D
Ajudo no possível, só postar!
routes.MapRoute("Site Antigo",
"categoria-{id}-{descricao}.html",
new { controller = "Telemensagem", action = "Categoria", id = UrlParameter.Optional, descricao = UrlParameter.Optional });
E na action tem que receber o id e a descricao como parametro.