C#

Книги | Ссылки
Начало | Классы | Методы | Свойства | Интерфейсы | Делегаты
Лямбда-выражения | Отражение

Классы Uri и UriTemplate

Построение URI

 Будем пользоваться классом UriTemplate. Для .Net Framework 4 нужно подключить сборку:  System.ServiceModel (в System.ServiceModel.dll). Документация на русском

Класс System.UriTemplate позволяет строить и разбирать URI по шаблону. Этот класс определяет шаблон, содержащий именованные макросы. Макросы заключаются в фигурные скобки. Макросы могут быть не только в запросе, но и в пути.

  1. using System;
  2. using System.Collections.Specialized;
  3.  
  4.  
  5. namespace ConsoleUriExample
  6. {
  7.   class Program
  8.   {
  9.     static void Main(string[] args)
  10.     {
  11.       string blogname = "sergun";
  12.       string blogname2 = "gaidar";
  13.  
  14.       // используем BindByPosition
  15.       Uri BlogsBaseUri = new Uri("http://www.gotdotnet.ru/blogs/");
  16.       UriTemplate BlogsUriTemplate = new UriTemplate("{blogname}");
  17.       Uri BlogsUri = BlogsUriTemplate.BindByPosition(BlogsBaseUri, blogname);
  18.       Console.WriteLine(BlogsUri.ToString());
  19.       Console.WriteLine("Для продолжения нажмите <Enter>");
  20.       Console.ReadLine();
  21.  
  22.       // используем BindByName
  23.       Uri OtherBlogsBaseUri = new Uri("http://www.gotdotnet.ru/blogs/");
  24.       UriTemplate OtherBlogsUriTemplate = new UriTemplate("{param1}");
  25.       NameValueCollection Params = new NameValueCollection();
  26.       Params.Add("param1", blogname2);
  27.       Uri Blogs = OtherBlogsUriTemplate.BindByName(OtherBlogsBaseUri, Params);
  28.       Console.WriteLine(Blogs.ToString());
  29.       Console.WriteLine("Для выхода нажмите <Enter>");
  30.       Console.ReadLine();
  31.     }
  32.   }
  33. }
* This source code was highlighted with Source Code Highlighter.

Разбор URI

Попробуем выделить параметры из имеющегося URI. В первом примере извлечем параметры из строки запроса.

  1. using System;
  2. using System.Collections.Specialized;
  3.  
  4. namespace ConsoleUriExample
  5. {
  6.   class Program
  7.   {
  8.     static void Main(string[] args)
  9.     {
  10.       Uri BaseUri = new Uri("http://rutracker.org/forum/");
  11.       UriTemplate TorrentsSeachUriTemplate = new UriTemplate("tracker.php?f[]={tema}&tm={interval}&o={o}&s={s}");
  12.       Uri MainUri = new Uri("http://rutracker.org/forum/tracker.php?f[]=521&f[]=599&f[]=313&f[]=101&tm=-1&o=1");
  13.  
  14.       UriTemplateMatch match = TorrentsSeachUriTemplate.Match(BaseUri, MainUri);
  15.  
  16.       foreach (string item in match.BoundVariables.Keys)
  17.       {
  18.         Console.WriteLine(String.Format("{0}: {1}", item, match.BoundVariables[item]));        
  19.       }
  20.       Console.WriteLine("Для продолжения нажмите <Enter>");
  21.       Console.ReadLine();
  22.      }
  23.   }
  24. }
* This source code was highlighted with Source Code Highlighter.

Результат:

В следующем примере извлечем параметр из пути.

  1. using System;
  2. using System.Collections.Specialized;
  3.  
  4. namespace ConsoleUriExample
  5. {
  6.   class Program
  7.   {
  8.     static void Main(string[] args)
  9.     {
  10.       Uri BlogsBaseUri = new Uri("http://www.gotdotnet.ru/blogs/");
  11.  
  12.       UriTemplate BlogsBaseUriTemplate = new UriTemplate("{name}");
  13.       Uri MainUri = new Uri("http://www.gotdotnet.ru/blogs/gaidar");
  14.  
  15.       UriTemplateMatch match = BlogsBaseUriTemplate.Match(BlogsBaseUri, MainUri);
  16.  
  17.       foreach (string item in match.BoundVariables.Keys)
  18.       {
  19.         Console.WriteLine(String.Format("{0}: {1}", item, match.BoundVariables[item]));        
  20.       }
  21.       Console.WriteLine("Для продолжения нажмите <Enter>");
  22.       Console.ReadLine();
  23.      }
  24.   }
  25. }
* This source code was highlighted with Source Code Highlighter.

Результат:

 


Главная | С# | WPF | Silverlight | Покер | Фотография | Разное
© Андрей Семёнов, 2009
Hosted by uCoz