A remoção .aspx extensão de sitecore em ExecuteRequest pipeline
-
21-12-2019 - |
Pergunta
Atualmente eu estou tentando remover .aspx extensões de sitecore URL.Um blog sugere que a mudança seria o seguinte corrigir este problema:
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"
O problema é que isso não funciona para todos os códigos em nossos sites como alguns controles personalizados forçar o uso de .aspx.
O que eu estava pensando é que, se eu posso entrar no pipeline antes de uma resposta é enviada de volta para o usuário poderia mudar a URL para um que é mais SEO amigável (não .aspx), eu estou tentando fazer isso usando o seguinte código
public class CustomExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
protected override void PerformRedirect(string url)
{
base.PerformRedirect(url.Replace(".aspx" , ""));
}
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
PerformRedirect(args.Url.FilePathWithQueryString.Replace(".aspx", ""));
//args.Url.FilePathWithQueryString = args.Url.FilePathWithQueryString.Replace(".aspx", "");
//base.Process(args);
}
}
O código está a ser atingido e esta solução funciona, no entanto, ele está realizando um redirecionamento que é realmente o que eu quero fazer, eu gostaria de, ao invés de ter apenas uma regulares pedido com o URL limpas.O problema é que a variável args tem um campo somente leitura (comentada a seguir), que é usado para criar o URL.
Alguém tem alguma idéia de como eu posso mudar a URL aqui, ou talvez em algum outro lugar no pipeline?
Solução
O que você está fazendo dentro do HttpRequestPipeline certamente NÃO é a forma correcta de alterar os links.Como com qualquer aplicação web, todos os links na página são retornados para o cliente, como o conteúdo da solicitação HTTP.Redirecionando durante o pedido não vai alterar o conteúdo apresentado.
A única maneira de fazer isso é a maneira mais difícil:
- Encontrar todos os lugares em sua fonte de geração de links que contém .aspx.Uma pesquisa de "aspx" dentro da solução pode ajudar
- Encontrar todas as referências a UrlOptions e LinkManager e verificar se AddAspxExtension=true é definida manualmente como urlOptions.
Algo como isso seria sempre produzir um .aspx, terminando por exemplo:
var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;
LinkManager.GetItemUrl(item, urlOptions);
Outras dicas
A maneira mais difícil de mudar todos os seus links usar o link manager ou se você estiver precisando de tempo, então, sugerir algo que talvez fora de sitecore e usar o IIS iis módulo.