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 |
|
Dns |
|
IPv4 |
|
IPv6 |
|
Unknown |
|
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VB .NET - Obtendo informações de uma web page - Macoratti.net
C# - Enviando arquivos para o servidor via FTP - Macoratti.net