C# - Apresentando os recursos da classe Uri - III


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

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

Recursos Usados neste artigo :

Propriedades URI

A classe Uri define diversas propriedades booleanas úteis que permitem classificar uma URI. As principais são:

Abaixo conferimos a utilização destas propriedades e o resultado obtido:

using System;
using static System.Console;
namespace CShp_Uri
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri uri = new Uri("http://macoratti:password@authority.com:5555/path/pagina.aspx?valor1=10&valor2=20#fragment");
            WriteLine(uri);
            WriteLine($"IsAbsoluteUri : {uri.IsAbsoluteUri}");
            WriteLine($"IsDefaultPort : {uri.IsDefaultPort}");
            WriteLine($"IsFile : {uri.IsFile}");
            WriteLine($"IsLoopback : {uri.IsLoopback}");
            WriteLine($"IsUnc : {uri.IsUnc}");
            ReadLine();
        }
    }
}

Segmentos URI

Nós já vimos obter parte do caminho de uma URI através da propriedade Path. Quando você deseja processar um caminho de uma URI absoluta, talvez realizando alguma reescrita de URL em um servidor, você precisa de uma maneira mais refinada de ler o caminho. A propriedade Segments pode ajudar.

A propriedade Segments retorna uma matriz de strings contendo os "segmentos" (substrings) que formam o caminho absoluto do URI. O primeiro segmento é obtido através da análise do caminho absoluto do seu primeiro caractere até chegar a uma barra (/) ou ao final do caminho.

Cada segmento adicional começa no primeiro caractere após o segmento anterior e termina com a próxima barra ou o final do caminho. (O caminho absoluto de URI contém tudo após o host e a porta e antes da consulta e do fragmento).

Exemplo de caminho absoluto e segmentos para duas URIs:

URI Absoluta
http://www.contoso.com/Chapters/Chapter1/Sections/Section1.htm
 
Caminho Absoluto
/Chapters/Chapter1/Sections/Section1.htm
 
Segments
/Chapters/Chapter1/Sections/Section1.htm

No código a seguir temos propriedade Segments em ação. Aqui, o caminho tem duas partes, mas gera três segmentos. O primeiro segmento é uma barra inclinada simples.

using System;
using static System.Console;
namespace CShp_Uri
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri uri = new Uri("http://macoratti:password@authority.com:5555/path/pagina.aspx?valor1=10&valor2=20#fragment");
            WriteLine(uri);
            //segments
            foreach (string segment in uri.Segments)
            {
                Console.WriteLine(segment);
            }
            ReadLine();
        }
    }
}

Métodos URI

Os construtores e as propriedades da classe Uri tornam o trabalho com URI muito mais simples do que se você tentasse alcançar os mesmos resultados usando somente strings.

Para mais flexibilidade, a classe inclui ainda uma diversos métodos de instãncia e métodos estáticos. Vamos focar nos métodos estáticos.

Comparando URIs para obter um caminho relativo

Se você quer obter um recurso em uma URI para se referir a outra URI usando a sintaxe relativa, você vai precisar converter uma URI absoluta para relativa.

É isso que faz o método MakeRelativeUri, que determina a diferença entre duas instâncias uri e cuja sintaxe é  :
 Uri1.MakeRelativeUri(Uri2)

O método executa o caminho que deve ser seguido da primeira URI para alcançar a segunda e retorna isso como um novo e relativo objeto Uri.

Se o caminho entre os dois endereços requer movimento "para cima" através da hierarquia do caminho, as etapas para cima serão incluídas como segmentos ".." no resultado.

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)
        {
            Uri uri1 = new Uri("http://www.macoratti.net/c_uri1.htm");
            Uri uri2 = new Uri("http://www.macoratti.net/images/represa1.jpg");
            WriteLine($"uri1 : {uri1}");
            WriteLine($"uri2 : {uri2}");
            WriteLine();
            WriteLine($"uri1.MakeRelativeUri(uri2) : {uri1.MakeRelativeUri(uri2)}");
            WriteLine($"uri2.MakeRelativeUri(uri1) : {uri2.MakeRelativeUri(uri1)}");
            ReadLine();
        }
    }
}

Extraindo o lado esquerdo de uma URI

O método GetLeftPart permite extrair partes de uma URI. Ele recupera uma ou mais partes de uma URI, começando pelo esquema e trabalhando da esquerda para a direita. Você determina qual é a última parte a retornar passando um valor da enumeração UriPartial.

Essa enumeração define as partes de uma URI para o método GetLeftPart. Os valores são:

Nome do membro

Descrição

 Authority Não inclui o delimitador de caminho.
 Path Incluir quaisquer delimitadores na URI original até o delimitador de consuulta o fragmento.
 Query Inclui o Path, a consulta e o delimitador.
 Scheme Inclui o delimitador de esquema da URI.

Exemplo:

URI Esquema Autoridade Caminho query
http://www.macoratti.net/index.htm?Date=Today

http://

http://www.macoratti.net http://www.macoratti.net/index.htm http://www.macoratti.net/index.htm?Date=Today

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)
        {
            Uri uri = new Uri("http://macoratti:password@authority.com:5555/path/pagina.aspx?valor1=10&valor2=20#fragment");
            Console.WriteLine(uri.GetLeftPart(UriPartial.Scheme));
            Console.WriteLine(uri.GetLeftPart(UriPartial.Authority));
            Console.WriteLine(uri.GetLeftPart(UriPartial.Path));
            Console.WriteLine(uri.GetLeftPart(UriPartial.Query));
            ReadLine();
        }
    }
}

Na próxima parte do artigo veremos outros recursos da classe Uri.

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

'E o testemunho é este: que Deus nos deu a vida eterna; e esta vida está em seu Filho.(Jesus Cristo)'
1 João 5:11

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