Jump to content
Claudio Neto

Criar rota personalizada

Recommended Posts

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.

Share this post


Link to post
Share on other sites


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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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>

Action:

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.

Share this post


Link to post
Share on other sites

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>

Share this post


Link to post
Share on other sites

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>

Share this post


Link to post
Share on other sites

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...

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By lsramos
      Tenho um DataGridView que exibe uma tabela do banco de dados. Até aí tudo bem :)
      A questão é que o cabeçalho (primeira linha do DataGrid) traz o nome das colunas da tabela do banco (exemplo: matricula, nome, data_nascimento, etc).
      Eu queria saber se é possível, até para melhor visualização, que eu personalizasse esse cabeçalho sem alterar do banco.
      Algo como inserir no DataGrid o nome das colunas e exportar do banco de dados sem o nome da coluna.
    • By eduarda_dasilveira
      O sistema deverá, utilizando a linguagem C, receber 6 apostas (6 números cada
      aposta no intervalo de 1 a 60) e armazenar estas informações em uma matriz quadrada de
      ordem 6. Um vetor chamado vetGabarito  deve armazenar 6 números, que são os gabaritos
      da aposta.
      Com a matriz de apostas preenchidas, o sistema deverá:
      a. Mostrar a soma da diagonal principal da matriz de apostas.
      b. Transferir todas as apostas para vetores de inteiros de 6 posições.
      c. Indicar quantos números pares e ímpares foram apostados.
      d. Indicar quantos acertos o jogador obteve para cada conjunto de aposta.
       
      Estou com dificuldade de fazer letra d.
      Meu código esta ai mas esta dando erro (mostrando a quantidade errada de acertos) na parte da letra d.
      #include <stdio.h> #include <time.h> #include <conio.h> #include <stdlib.h> int main (void){ int mat [6][6], vetGabarito[6], vet1[6], vet2[6], vet3[6], vet4[6], vet5[6], vet6[6], l, c, soma_diagonal=0, impar=0, par=0; srand (time (NULL)); for (l=0; l<6; l++){ for (c=0; c<6; c++){ printf ("Digite a sua aposta de 1 a 60:"); scanf ("%d", &mat [l][c]); } } for (l=0; l<6; l++){ for (c=0; c<6; c++){ printf (" %d", mat [l][c]); } printf ("\n"); } for (l=0; l<6; l++){ for (c=0; c<6; c++){ if (l==c){ soma_diagonal=soma_diagonal+mat[l][c]; } } } for (c=0; c<6; c++){ vet1[c]= mat [0][c]; vet2[c]= mat [1][c]; vet3[c]= mat [2][c]; vet4[c]= mat [3][c]; vet5[c]= mat [4][c]; vet6[c]= mat [5][c]; printf ("Apostas do jogador na rodada [%d] e %d\n", c, vet1[c]); printf ("Apostas do jogador na rodada [%d] e %d\n", c, vet2[c]); printf ("Apostas do jogador na rodada [%d] e %d\n", c, vet3[c]); printf ("Apostas do jogador na rodada [%d] e %d\n", c, vet4[c]); printf ("Apostas do jogador na rodada [%d] e %d\n", c, vet5[c]); printf ("Aposta do jogador na rodada [%d] e %d\n", c, vet6[c]); } for (l=0; l<6; l++){ for (c=0; c<6; c++){ if ((mat[l][c]%2)==0){ par++; } else { impar++; } } } srand (time (NULL)); for (c=0;c<6;c++){ vetGabarito[c]=rand()%10; } for (c=0; c<6; c++){ printf (" %d", vetGabarito[c]); printf ("\n"); } for (c=0; c<6; c++){ vet1[0]==vetGabarito[c]; vet2[1]==vetGabarito[c]; vet3[2]==vetGabarito[c]; vet4[3]==vetGabarito[c]; vet5[4]==vetGabarito[c]; vet6[5]==vetGabarito[c]; } printf ("A soma da diagonal da matriz e: %d\n", soma_diagonal); printf ("A quantidade de numeros pares foi %d, e de numeros impares foi %d\n", par, impar); printf ("O jogador na primeira rodada teve %d de acertos.\n", vet1[0]); printf ("O jogador na segunda rodada teve %d de acertos.\n", vet2[1]); printf ("O jogador na terceira rodada teve %d de acertos.\n", vet3[2]); printf ("O jogador na quarta rodada teve %d de acertos.\n", vet4[3]); printf ("O jogador na quinta rodada teve %d de acertos.\n", vet5[4]); printf ("O jogador na sexta rodada teve %d de acertos.\n", vet6[5]); return 0; }  
    • By Davi DEVV
      Faça um algoritmo que (utilize funções com ponteiros):
      - Tenha um menu que permita entrar nas funções inserir e buscar, ao selecionar a função inserir, insira somente um funcionário por vez, voltando ao menu principal.
      - Tenha uma estrutura para armazenar, nome, número do cartão e setor de um funcionário.
      - Armazene 10 funcionários.
      - Permita buscar os dados de um funcionário através do número do cartão.
    • By lulicanunes
      - Escreva o programa em linguagem C - É permitido o uso do CodeBlocks - Envie o arquivo, no local apropriado Descrição. Faça um programa em C que calcule o imposto de renda para um conjunto de 5 pessoas (contribuintes). Os dados de cada pessoa devem ser manipulados através de uma estrutura que contém os campos para o nome (string), sobrenome (string), salário mensal (float), deduções (float) e saldo (float). A leitura será feita através de um arquivo texto contendo informações referentes aos três primeiros campos da estrutura. Ao final, o saldo de cada contribuinte deve ser exibido na tela junto com seu nome e sobrenome. OBS.: As instruções a seguir implementam a lógica para resolver esse problema.
      Instruções. 1.
      (1,0) Defina a estrutura para armazenar os dados dos contribuintes.
      2. (1,0) Declare um vetor de estruturas com 5 posições.
      3. (3,0) Faça a leitura dos dados do arquivo de entrada, armazenando-os nas respectivas posições do vetor criado.
      OBS.: Assuma que o arquivo de entrada tem o nome "imposto.txt" e que cada registro (ou linha) desse arquivo tem o formato "%s\t%s\t%f\t%f\n" (i.e., os dados estão separados pelo caractere TAB - "\t").
      Exemplos de possíveis registros do arquivo de entrada:
      Pedro      Silva      2200.00      980.00
      Paulo      Santos    5400.00     2230.00
       
      (3,0) Após concluir a leitura dos dados, crie uma função que será chamada somente uma vez e que receba o vetor de structs e, a partir das informações de salário e deduções, calcule o saldo (imposto devido ou restituição) a ser pago para cada pessoa de acordo com a seguinte fórmula Saldo = Deduções - (12 * Salário mensal * Alíquota)
      O valor da alíquota depende do salário mensal de cada pessoa, com a seguinte divisão:
       
      Salário Mensal                                           Alíquota
      Abaixo de R$ 2.826                                      0.075                            
      De R$ 2.826 até R$ 4.664                            0.225
      Acima de R$ 4.664                                        0.275
       
      (2,0) Imprima na tela um relatório contendo o nome, o sobrenome e o saldo de todos os contribuintes. Exemplo de execução. Resultado considerando o arquivo de entrada fornecido. Nome: João
      Sobrenome: Silva
      Saldo: 9820.00
       
      Nome: Osvaldo
      Sobrenome: Aranha
      Saldo: 6480.00
       
      Nome: Pedro
      Sobrenome: Alves
      Saldo: 4542.00
    • By Joseph Amupolo
      Eu estou começando aprender a linguagem C, alguem  pode me ajudar com esse excercício?
      Desenvolver um sistema para catálogo de produtos em um supermercado
       
      Os itens devem conter:
      • Código do produto
      • Descrição
      • Quantidade em estoque
      • Valor (Em Reais)
       
      O sistema deve oferecer um menu ao usuário, permitindo as seguintes operações:
      1. Cadastrar produto
      2. Remover produto
      3. Consultar produto
      4. Resumo do estoque
      5. Sair
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.