Будем пользоваться классом UriTemplate. Для .Net Framework 4 нужно подключить сборку: System.ServiceModel (в System.ServiceModel.dll). Документация на русском
Класс System.UriTemplate позволяет строить и разбирать URI по шаблону. Этот класс определяет шаблон, содержащий именованные макросы. Макросы заключаются в фигурные скобки. Макросы могут быть не только в запросе, но и в пути.
- using System;
- using System.Collections.Specialized;
-
-
- namespace ConsoleUriExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- string blogname = "sergun";
- string blogname2 = "gaidar";
-
- // используем BindByPosition
- Uri BlogsBaseUri = new Uri("http://www.gotdotnet.ru/blogs/");
- UriTemplate BlogsUriTemplate = new UriTemplate("{blogname}");
- Uri BlogsUri = BlogsUriTemplate.BindByPosition(BlogsBaseUri, blogname);
- Console.WriteLine(BlogsUri.ToString());
- Console.WriteLine("Для продолжения нажмите <Enter>");
- Console.ReadLine();
-
- // используем BindByName
- Uri OtherBlogsBaseUri = new Uri("http://www.gotdotnet.ru/blogs/");
- UriTemplate OtherBlogsUriTemplate = new UriTemplate("{param1}");
- NameValueCollection Params = new NameValueCollection();
- Params.Add("param1", blogname2);
- Uri Blogs = OtherBlogsUriTemplate.BindByName(OtherBlogsBaseUri, Params);
- Console.WriteLine(Blogs.ToString());
- Console.WriteLine("Для выхода нажмите <Enter>");
- Console.ReadLine();
- }
- }
- }
* This source code was highlighted with Source Code Highlighter.
Попробуем выделить параметры из имеющегося URI. В первом примере извлечем параметры из строки запроса.
- using System;
- using System.Collections.Specialized;
-
- namespace ConsoleUriExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- Uri BaseUri = new Uri("http://rutracker.org/forum/");
- UriTemplate TorrentsSeachUriTemplate = new UriTemplate("tracker.php?f[]={tema}&tm={interval}&o={o}&s={s}");
- Uri MainUri = new Uri("http://rutracker.org/forum/tracker.php?f[]=521&f[]=599&f[]=313&f[]=101&tm=-1&o=1");
-
- UriTemplateMatch match = TorrentsSeachUriTemplate.Match(BaseUri, MainUri);
-
- foreach (string item in match.BoundVariables.Keys)
- {
- Console.WriteLine(String.Format("{0}: {1}", item, match.BoundVariables[item]));
- }
- Console.WriteLine("Для продолжения нажмите <Enter>");
- Console.ReadLine();
- }
- }
- }
* This source code was highlighted with Source Code Highlighter.
Результат:
В следующем примере извлечем параметр из пути.
- using System;
- using System.Collections.Specialized;
-
- namespace ConsoleUriExample
- {
- class Program
- {
- static void Main(string[] args)
- {
- Uri BlogsBaseUri = new Uri("http://www.gotdotnet.ru/blogs/");
-
- UriTemplate BlogsBaseUriTemplate = new UriTemplate("{name}");
- Uri MainUri = new Uri("http://www.gotdotnet.ru/blogs/gaidar");
-
- UriTemplateMatch match = BlogsBaseUriTemplate.Match(BlogsBaseUri, MainUri);
-
- foreach (string item in match.BoundVariables.Keys)
- {
- Console.WriteLine(String.Format("{0}: {1}", item, match.BoundVariables[item]));
- }
- Console.WriteLine("Для продолжения нажмите <Enter>");
- Console.ReadLine();
- }
- }
- }
* This source code was highlighted with Source Code Highlighter.
Результат: