C# - Apresentando os recursos da classe Uri - IV


 Neste artigo vou apresentar os recursos da classe Uri do namespace System da linguagem C#.

Vamos continuar a terceira parte deste artigo apresentando mais recursos da classe Uri.

Recursos Usados neste artigo :

Métodos Estáticos para validar o esquema e o host

Veremos agora dois métodos estáticos da classe Uri que fornecem funcionalidades para validar URIs e codificar caracteres especiais para utilizar em URIs.

Os principais métodos para validação são:

Quando você inicializa um novo objeto Uri, a URI que você fornece ao construtor é validada. Se a URI estiver incorreta, uma exceção será lançada. Você também pode realizar alguma validação em partes das URIs, mantidas em strings, antes de tentar construir um novo objeto.

A classe Uri oferece dois membros estáticos. Um para verificar se o nome do esquema é válido, que é o método CheckSchemeName e que retorna true se o nome do esquema não contém caracteres inválidos.(Por padrão a validação é feita de acordo com a RFC 2396)

O outro é o método CheckHostName  usado para verificar se um nome de host é válido, este método retorna um valor UriHostNameType que descreve o tipo de host detectado.

Abaixo vemos os tipos de host previstos:

Nome do membro Descrição
Basic
O host está definido, mas o tipo não pode ser determinado.
Dns
O nome do host é um nome de host do estilo DNS (sistema de nome de domínio) de nome de host.
IPv4
O nome do host é um endereço IP (Internet Protocol) versão 4 do host.
IPv6
O nome do host é um endereço IP (Internet Protocol) versão 6 do host.
Unknown
O tipo do nome do host não é fornecido.

Abaixo conferimos a utilização destes métodos e o resultado obtido:

using System;
using static System.Console;
namespace CShp_Uri
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine($"http : " + Uri.CheckSchemeName("http"));
            WriteLine($"invalido : " + Uri.CheckSchemeName("invalido"));
            WriteLine($"www.macoratti.net : " + Uri.CheckHostName("www.macoratti.net"));
            WriteLine($"192.168.0.1 : " + Uri.CheckHostName("192.168.0.1"));
            WriteLine($"2001:0DB8:AC10:FE01:: -> " + Uri.CheckHostName("2001:0DB8:AC10:FE01::"));
            WriteLine($"! : " + Uri.CheckHostName("!"));
            WriteLine($"localhost : " + Uri.CheckHostName("localhost"));
            WriteLine($"127.0.0.1 : " + Uri.CheckHostName("127.0.0.1"));
            ReadLine();
        }
    }
}

Codificação Hexadecimal

Existem limitações nos caracteres que podem ser usados ​​em URIs, devido ao uso de certos símbolos para denotar as várias partes de URIs. Quando você precisa incluir esses caracteres, você pode codificá-los usando um número hexadecimal, prefixado com um símbolo de porcentagem (%).

Por exemplo, ao usar um URI para codificar a parte de consulta de um endereço de página da Web, você pode usar caracteres & comercial para separar pares de chaves/valores. Se você quiser incluir um & comercial em um dos valores, você pode codificá-lo como "%26". Por exemplo, "?Query=teste%26demo".

Geralmente, a classe Uri inclui métodos que codificam caracteres individuais no formato hexadecimal e decodificam itens hexadecimais para retornar o caractere original.

Os dois métodos usados para isso são:

- HexEscape :  Aceita um valor de caractere e retorna a string codificada.
- HexUnescape : Requer dois parâmetros. O primeiro é uma seqüência de caracteres que contém um caractere codificado hexadecimal para decodificar. O segundo parâmetro é um inteiro, passado por referência, que especifica o índice do símbolo de porcentagem que inicia a seção codificada. Ele retorna um caractere decodificado.

No exemplo a seguir, temos um caractere que é codificado e o resultado é decodificado:

using System;
using static System.Console;
namespace CShp_Uri
{
    class Program
    {
        static void Main(string[] args)
        {
            string codificacao;
            int valor = 0;
            char caractere;
            codificacao = Uri.HexEscape('&');
            caractere = Uri.HexUnescape(codificacao, ref valor);
            WriteLine($"Resultado => {caractere} = {codificacao}");
            ReadLine();
        }
    }
}

Pode ser útil verificar se um ponto específico de uma cadeia representa um caractere codificado antes de tentar uma operação de decodificação.

Você pode fazer isso com o método IsHexEncoding, que usa os mesmos parâmetros que HexDecode, exceto que a posição do índice é passada pelo valor.

O método retorna true se o texto na posição dada for decodificável e false caso contrário.

Você pode ver isso no código de exemplo abaixo:

using System;
using static System.Console;
namespace CShp_Uri
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("Verificando Codificacao");
            WriteLine($"%26 => " + Uri.IsHexEncoding("%26", 0));
            WriteLine($"Valor => " + Uri.IsHexEncoding("Valor", 0));
            ReadLine();
        }
    }
}

Trabalhanco com digitos Hexadecimais

Para concluir veremos os dois últimos métodos estáticos que lidam diretamente com os dígitos hexadecimais, sem ligação direta às URIs. Apesar disso eles ainda podem ser úteis e podem fornecer boa legibilidade de código. São eles:

1- IsHexDigit - Verifica um caractere para ver se ele contém um dígito hexadecimal, 0-9 ou A-F;
2 - FromHex -  Converte um único dígito hexadecimal, fornecido como um caractere, ao seu inteiro equivalente;

No código a seguir temos um exemplo de utilização desse recurso:

using System;
using static System.Console;
namespace CShp_Uri
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine($"FromHex('F') => " + Uri.FromHex('F'));
            WriteLine($"Uri.IsHexDigit('F') => " + Uri.IsHexDigit('F'));
            ReadLine();
            ReadLine();
        }
    }
}

E assim concluímos a nossa abordagem sobre os principais recursos da classe Uri.

Pegue o código do projeto aqui :  CShp_Uri_2.zip

(disse Jesus) "Não crês tu que eu estou no Pai, e que o Pai está em mim? As palavras que eu vos digo não as digo de mim mesmo, mas o Pai, que está em mim, é quem faz as obras."
João 14:9

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti