none
Ocultar ID da URL (C# MVC) RRS feed

  • Pergunta

  • Olá, tudo bem?

    Trabalho com uma aplicação em C# MVC e necessito ocultar da URL o ID do controler

    URL: /xpto/pedidos/visualizar/0123456

    Como ocultar da URL o ID dos pedidos, no exemplo acima "0123456"?

    Vi artigos relacionados a slug, mas não entendi muito bem como aplicar ao que preciso, então se houver, também, alguma outra explicação.

    Artigos que li:

    http://pt.stackoverflow.com/questions/9805/montar-url-sem-aparecer-o-nome-da-action-ou-da-controller-ou-ambas

    http://pt.stackoverflow.com/questions/45774/esconder-parametro-do-actionlink

    Obrigado 

    quarta-feira, 16 de novembro de 2016 13:22

Todas as Respostas

  • ola , 

    o nome do que você procura é 'url amigável' , vou mandar um link que possa ajudar .

    abraços

    http://cbsa.com.br/post/criar-urls-mais-amigaveis-mais-informativas-usando-o-globalasax-url-rewriting.aspx

    quarta-feira, 16 de novembro de 2016 13:31
  • Olá Felipe,

    O Slug, como o artigo fala, é um identificador descritivo (que de alguma forma precisa ser único). Você vê muito isso em blogs e fóruns.

    A geração desse slug é feita por você e deve ser gravada no banco de dados, para que no momento da consulta ou retorno da URL você use ele como identificador e não um ID.

    Isso é muito usado pelo fato de ficar uma URL mais amigável e bonita ao invés de utilizar um hash ou simplesmente um ID.

    Outra maneira de não passar o ID pela URL e conseguir passar o ID para outra controller, seria usar Sessions, porém não recomendo por diversos motivos que não vale citar agora.

    Dá uma olhada como você pode implementar uma URL utilizando slug: http://www.jerriepelser.com/blog/generate-seo-friendly-urls-aspnet-mvc

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 16 de novembro de 2016 13:33
  • Felipe,

    Você quer esconder o ID ou não quer que a pessoa consiga visualizar um registro digitando a URL diretamente no browser (exemplo: você quer que a pessoa passe obrigatoriamente numa página com uma lista de pedidos para que a mesma consiga visualizar um pedido)? 


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    quarta-feira, 16 de novembro de 2016 13:42
  • Juliano,

    Necessito ocultar o ID do pedido para que o usuário não possa alterar o número do pedido e acessar outros pedidos.

    Criarei uma validação para que o usuário possa acessar apenas os pedidos pertinentes a sua loja, mas mesmo assim, necessito ocultar o número do pedido da URL.

    quarta-feira, 16 de novembro de 2016 14:03
  • Outra possibilidade é acessar esta página utilizando método POST. Isso impedirá usuários leigos de acessarem outros pedidos somente através da URL.

    Para fazer isto você pode usar este exemplo:

    <form action="visualizar.aspx" id="formNav" method="post">
    <input type="hidden" id="pedido" value=""/>
    </form>
    
    <script type="text\javascript">
    function abrirPedido(pedido) {
        document.getElementById("pedido").value = pedido;
        document.getElementById("formNav").submit();
    }
    </script>
    
    <a href="#" onclick="abrirPedido('88888')">Pedido 88888</a>
    Daí na página de visualização do pedido você usa o Request.Forms["pedido"] para capturar o ID do pedido ao invés de usar parâmetros na action.



    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".


    quarta-feira, 16 de novembro de 2016 14:16
  • André,

    Primeiro, obrigado pela ajuda. Pelo que vi no artigo, é adicionado na URL o nome do produto juntamente ao id, mas o que eu preciso é ocultar o id da URL, porém permanecendo-o no code behind.

    Teria alguma outra alternativa ou alguma explicação de como posso fazer isso?

    Mais uma vez, muito obrigado.

    quinta-feira, 17 de novembro de 2016 15:29
  • Então Felipe,

    No exemplo ele utiliza o ID também, mas não é algo obrigatório.

    Dá uma olhada para ver se este exemplo fica mais claro: http://www.4sln.com/Articles/seo-friendly-url-rewriting-in-mvc-by-keeping-references-in-database

    Resumindo, na minha opinião para não expor o ID nem no código fonte da página através de um campo oculto e nem na URL, você teria que ter uma tabela no banco de dados, como ou parecida com a do artigo acima para conseguir vincular um ID com um nome amigável ou um hash (código).

    Vi que mencionou que seria algo para identificar um pedido, então uma URL amigável (tipo a de blogs) não se encaixaria bem. Você poderia fazer essa vinculação com um identificador único (no C# chamamos de GUID e no SQL Server o tipo de dados chama-se UNIQUEIDENTIFIER).

    Então, ou você faz uma tabela que vincule o código do seu pedido com um código GUID, ou se tiver a possibilidade, poderia mudar o próprio tipo de dados da coluna ID da sua tabela de pedidos para GUID tbm. Levando em consideração que esse código é único e não é sequencial, dificultando que o usuário fique tentando acessar outro pedido.

    Segue referência: https://technet.microsoft.com/pt-br/library/ms190215%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396

    Entendeu?


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quinta-feira, 17 de novembro de 2016 15:55