Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Klasy UriTemplate i UriTemplateTable

.NET Framework (current version)
 

Deweloperzy sieci Web wymagają możliwości do opisania kształtu i układ identyfikatory URI, które odpowiadają swoich usług.Windows Communication Foundation (WCF) dodano dwa nowe klasy zapewniające deweloperom kontrolę nad ich identyfikatorów URI. UriTemplate i UriTemplateTable stanowią podstawę aparatu na podstawie identyfikatora URI wysyłania w WCF. Te klasy można również na ich własnych, dzięki czemu deweloperzy korzystać z szablonów i mechanizm mapowania identyfikatora URI bez stosowania WCF usługi.

Szablon jest umożliwia opisywanie zestaw identyfikatorów względnych. Zestawu szablonów URI w poniższej tabeli pokazano, jak można zdefiniować na system, który pobiera różne rodzaje informacji o pogodzie.

Danych

Szablon

Prognoza krajowych

pogody/national

Prognoza stanu

pogody / {state}

Miasto prognozy

pogody / {state} / {Miasto}

Prognoza działania

pogody / {state} / {Miasto} / {działania}

W tej tabeli opisano zestaw strukturalnie podobne identyfikatorów URI. Każdy wpis jest szablon identyfikatora URI. Segmenty w nawiasy klamrowe opisują zmiennych. Segmenty nie w nawiasy klamrowe opisywania literałów ciągów.WCF Szablonu klasy umożliwiają Deweloper wziąć przychodzących URI, na przykład "/ pogody/wa/seattle/obudów", i dopasować go do szablonu, który opisuje, "/weather/ {stanu} / {Miasto} / {działania}".

UriTemplate jest to klasa, która hermetyzuje szablon identyfikatora URI. Konstruktor przyjmuje parametr ciąg, który definiuje szablon. Ten ciąg zawiera szablon w formacie opisany w następnej sekcji. UriTemplate Udostępnia metody, które umożliwiają zgodne przychodzących URI do szablonu, Wygeneruj identyfikator URI z szablonu, pobrać kolekcję zmiennych nazwy używane w szablonie, określić, czy dwa szablony są równoważne i zwraca ciąg szablonu.

Match(Uri, Uri) ma adres podstawowy i kandydatem identyfikatora URI i próbuje dopasować identyfikatora URI do szablonu. Jeśli dopasowanie się powiedzie, UriTemplateMatch wystąpienie jest zwracane. UriTemplateMatch Obiekt zawiera podstawowy identyfikator URI candidate identyfikatora URI, nazwa/wartość zbiór parametrów zapytania, Tablica segmentów ścieżki względnej, nazwa/wartość zbiór zmiennych, które zostały dopasowane UriTemplate wystąpienia używany do wykonywania dopasowanie, ciąg, który zawiera niezgodne części candidate identyfikatora URI (używane przy szablon ma być symbol wieloznaczny) i obiekt, który jest skojarzony z szablonem.

System_CAPS_noteUwaga

UriTemplate Klasa ignoruje schemat i numer portu podczas dopasowywania identyfikatora URI kandydatem do szablonu.

Istnieją dwie metody, dzięki którym można wygenerować identyfikatora URI z szablonu, BindByName(Uri, NameValueCollection) i BindByPosition(Uri, String[]). BindByName(Uri, NameValueCollection) przyjmuje adres podstawowy i nazwa/wartość kolekcji parametrów. Te parametry są zastępowane zmienne, gdy szablon jest powiązana. BindByPosition(Uri, String[]) Trwa pary nazwa/wartość i zastępuje je od lewej do prawej.

ToString() Zwraca ciąg szablonu.

PathSegmentVariableNames Właściwość zawiera zbiór nazw zmiennych w segmentach ścieżki w ciągu szablonu.

IsEquivalentTo(UriTemplate) przyjmuje UriTemplate jako parametr i zwraca wartość logiczną, która określa, czy dwa szablony są równoważne.Aby uzyskać więcej informacji, zobacz części szablonu równoważności w dalszej części tego tematu.

UriTemplate jest przeznaczony do pracy z dowolnego schemat identyfikatora URI, które odpowiada gramatyka HTTP URI. Poniżej przedstawiono przykłady obsługiwane schematy identyfikatorów URI.

  • http://

  • https://

  • NET.TCP://

  • NET.pipe://

  • SB: / /

Schematy, takich jak file:// i urn: / / nie są zgodne z gramatyka HTTP URI i spowodować nieprzewidywalne skutki, gdy jest używana z szablonami identyfikatora URI.

Szablon ma trzy części: ścieżki, opcjonalny zapytania i fragmentu opcjonalne. Na przykład zobacz następujący szablon:

"/weather/{state}/{city}?forecast={length)#frag1

Ścieżka składa się z "/weather/ {stanu} / {Miasto}", zapytanie składa się z"? prognozy = {długość} i fragmentu składa się z"#frag1".

Początkowe i końcowe ukośniki są opcjonalne w wyrażeniu ścieżki. Wyrażenia zapytań i fragment można całkowicie pominąć. Ścieżka składa się z szeregu segmenty rozdzielone '/', każdy segment może mieć wartość literału, nazwa zmiennej (zapisany w {nawiasy klamrowe}) lub symbol wieloznaczny (zapisywane w postaci "*"). W poprzednim szablonu "\weather\ segmentu jest literałem zmienne są wartości podczas"{stan}"i"Miasto {}". Zmienne mają nazwy z zawartości ich nawiasy klamrowe i ich można później zastąpić konkretną wartość, aby utworzyć zamknięte URI. Symbol wieloznaczny jest opcjonalne, ale może wystąpić tylko na końcu identyfikatora URI, których logicznie odpowiada "pozostałą część ścieżki".

Wyrażenie kwerendy, jeśli jest obecny, określa serii par nazwa wartość Nieuporządkowana rozdzielone 'i'. Elementy wyrażenia kwerendy może być literału pary (x = 2) lub parę zmiennych (x = {var}). Tylko po prawej stronie zapytania mogą zawierać wyrażenie zmiennej. ({JakaśNazwa} = {someValue} nie jest dozwolone. Nieparzysty wartości (? x) nie są dozwolone. Nie ma różnicy między wyrażenia pusty zapytania i składającą się tylko pojedynczego wyrażenia zapytania "?" (zarówno oznacza "wszelkie zapytania").

Wyrażenie fragmentacji może składać się z wartości literału, zmienne nie są dozwolone.

Wszystkie nazwy zmiennych szablonu w ciągu szablonu musi być unikatowa. Nazwy zmiennych szablonu jest rozróżniana wielkość liter.

Przykłady ciągów prawidłowy szablon:

  • ""

  • "/ uniesienia"

  • "/ buta / *"

  • "{buta} / łodzi"

  • "{buta} / {łodzi} /bed/ {patchworkowa}"

  • "uniesienia / {łodzi}"

  • "uniesienia / {łodzi} / *"

  • "buta/łodzi? x = 2"

  • "uniesienia / {łodzi}? x = {bielizny}"

  • "uniesienia / {łodzi}? x = {bielizny} & y = pasmem"

  • "? x = {buta}"

  • "buta? x = 3 & y = {var}

Przykłady ciągów szablonu jest nieprawidłowa:

  • "{buta} / {UNIESIENIA} / x = 2" — zduplikowane nazwy zmiennej.

  • "{buta} /boat/? bielizny = {buta}" — zduplikowane nazwy zmiennej.

  • "? x = 2 & x = 3" — pary nazwa/wartość ciągu zapytania musi być unikatowa, nawet jeśli są literały.

  • "? x = 2 &" — ciąg zapytania jest nieprawidłowo sformułowany.

  • "? 2 & x = {buta}" — ciąg zapytania musi być pary nazwa/wartość.

  • "? y = 2 & & X = 3" — ciąg zapytania musi być pary nazwa wartość, nazwy nie może zaczynać się 'i'.

Segmenty ścieżki złożonej Zezwalaj jednego segmentu ścieżki identyfikatora URI zawiera wiele zmiennych, a także zmiennych w połączeniu z literały. Poniżej przedstawiono przykłady segmentów ścieżki złożonej prawidłowy.

  • argumentu/FILENAME. {ext} /

  • /{filename}.jpg/

  • / {filename}. {ext} /

  • /{a}. {b}someLiteral{c}({d}) /

Poniżej przedstawiono przykłady segmentów nieprawidłową ścieżkę.

  • /{} - Zmienne musi mieć nazwę.

  • / {uniesienia} {łodzi} - zmiennych muszą być oddzielone literału.

Segmenty ścieżki złożonej umożliwiają definiowanie UriTemplate, zawierający wiele zmiennych w segmencie pojedynczą ścieżkę. Na przykład w szablonie następujący ciąg: "adresy / {state}. {Miasto} "w tym samym segmencie są zdefiniowane dwie zmienne (stanu i miasta). Ten szablon będzie odpowiadał adres URL, taki jak "http://example.com/Washington.Redmond", ale również będzie ono mieć adresu URL, takie jak "http://example.com/Washington.Redmond.Microsoft". W tym ostatnim przypadku zmiennej stanu będzie zawierać "Washington" i zmiennej Miasto będzie zawierać "Redmond.Microsoft". W takim przypadku dowolny tekst (z wyjątkiem "/") będzie zgodna zmiennej {miasto}. Szablon, który nie będzie zgodna z tekstu "dodatkowe", należy umieścić zmiennej w segmencie oddzielnych szablonu, na przykład: "adresy / {state} / {miasto}.

Segment symbolu wieloznacznego nazwany jest dowolnego segmentu zmiennej ścieżki, którego nazwa zmiennej rozpoczyna się z symbolem wieloznacznym "*". Następujący ciąg szablonu zawiera segment nazwane symbolu wieloznacznego o nazwie "buta".

"literal/{*shoe}"

Segmenty symboli wieloznacznych, należy wykonać następujące reguły:

  • Może istnieć co najwyżej jeden segment nazwane symbolu wieloznacznego dla każdego ciągu szablonu.

  • Segment symbolu wieloznacznego nazwane musi znajdować się w segmencie prawej w ścieżce.

  • Segment symbolu wieloznacznego nazwane nie może współistnieć z segmentu anonimowe symboli wieloznacznych w ciągu tego samego szablonu.

  • Nazwa segmentu symbolu wieloznacznego nazwane musi być unikatowa.

  • O nazwie symbol wieloznaczny segmentów nie może mieć wartości domyślne.

  • Segmenty nazwane symboli wieloznacznych nie może kończyć się "/".

Domyślne wartości zmiennych umożliwiają określanie wartości domyślnych dla zmiennych w ramach szablonu. Można określić domyślne zmienne w nawiasach klamrowych, które zadeklarować zmienną lub jako kolekcja przekazany do konstruktora UriTemplate. Następujący szablon zawiera dwa sposoby określania UriTemplate za pomocą zmiennych z wartościami domyślnymi.

UriTemplate t = new UriTemplate("/test/{a=1}/{b=5}");

Ten szablon deklaruje zmienną o nazwie a o wartości domyślne 1 i zmienną o nazwie b o wartości domyślne 5.

System_CAPS_noteUwaga

Tylko zmienne segmentu ścieżki mogą mieć wartości domyślnych. Zmienne ciągu kwerendy, złożone segmentu zmiennych i zmiennych nazwanych symboli wieloznacznych nie mogą mieć wartości domyślne.

Poniższy kod przedstawia sposób obsługi domyślnych wartości zmiennych podczas dopasowywania candidate identyfikatora URI.

Uri baseAddress = new Uri("http://localhost:800 
Dictionary<string,string> defVals = new Dictionary<string,string> {{"a","1"}, {"b", "5"}};
UriTemplate t = new UriTemplate("/test/{a}/{b}", defVals);0");
UriTemplate t = new UriTemplate("/{state=WA}/{city=Redmond}/", true);
Uri candidate = new Uri("http://localhost:8000/OR");

UriTemplateMatch m1 = t.Match(baseAddress, candidate);

// Display contents of BoundVariables
foreach (string key in m1.BoundVariables.AllKeys)
{
    Console.WriteLine("\t\t{0}={1}", key, m1.BoundVariables[key]);
}
// The output of the above code is
// Template: /{state=WA}/{city=Redmond}/
// Candidate URI: http://localhost:8000/OR
// BoundVariables:
//      STATE=OR
//       CITY=Redmond

System_CAPS_noteUwaga

Identyfikator URI, takich jak 8000 / / / jest niezgodny z szablonu wymienionych w powyższym kodzie, jednak identyfikatora URI, takich jak 8000 / jest.

Poniższy kod przedstawia sposób obsługi domyślnych wartości zmiennych podczas tworzenia identyfikatora URI za pomocą szablonu.

Uri baseAddress = new Uri("http://localhost:8000/");
Dictionary<string,string> defVals = new Dictionary<string,string> {{"a","1"}, {"b", "5"}};
UriTemplate t = new UriTemplate("/test/{a}/{b}", defVals);
NameValueCollection vals = new NameValueCollection();
vals.Add("a", "10");

Uri boundUri = t.BindByName(baseAddress, vals);
Console.WriteLine("BaseAddress: {0}", baseAddress);
Console.WriteLine("Template: {0}", t.ToString());

Console.WriteLine("Values: ");
foreach (string key in vals.AllKeys)
{
    Console.WriteLine("\tKey = {0}, Value = {1}", key, vals[key]);
}
Console.WriteLine("Bound URI: {0}", boundUri);

// The output of the preceding code is
// BaseAddress: http://localhost:8000/
// Template: /test/{a}/{b}
// Values:
//     Key = a, Value = 10
// Bound URI: http://localhost:8000/test/10/5

Gdy zmiennej znajduje się wartość domyślną równą null istnieją pewne dodatkowe ograniczenia. Zmienna może mieć wartość domyślną równą null czy zmienna jest zawarty w prawo większości segmentu ciągu szablonu lub jeśli wartości domyślne wszystkich segmentów na prawo od segmentu null. Poniżej podano prawidłowy szablon ciągi z wartościami domyślnymi null:

  • UriTemplate t = new UriTemplate("shoe/{boat=null}");
    
  • UriTemplate t = new UriTemplate("{shoe=null}/{boat=null}");
    
  • UriTemplate t = new UriTemplate("{shoe=1}/{boat=null}");
    

Poniżej przedstawiono ciągi szablonu jest nieprawidłowa z wartościami domyślnymi null:

  • UriTemplate t = new UriTemplate("{shoe=null}/boat"); // null default must be in the right most path segment
    
  • UriTemplate t = new UriTemplate("{shoe=null}/{boat=x}/{bed=null}"); // shoe cannot have a null default because boat does not have a default null value
    

Podczas dopasowywania candidate identyfikatora URI za pomocą szablonu, który zawiera wartości domyślne, wartości domyślne są umieszczane w BoundVariables kolekcji, jeśli nie określono wartości w candidate identyfikatora URI.

Dwa szablony są określane jako strukturalnie równoważne kiedy wszystkie szablony programu literały odpowiadać i mają zmiennych w tym samym segmentów. Na przykład poniższe szablony są strukturalnie równoważne:

  • b /b /a/ {var1} / {var2}? x = 1 & y = 2

  • a/{x}/b%20b/{var1}?y=2 & x = 1

  • a/{y}/B%20b/{z}/?y=2 & x = 1

Kilka rzeczy, które należy zauważyć:

  • Jeśli szablon zawiera początkowe ukośniki, tylko pierwszy z nich jest ignorowana.

  • Podczas porównywania ciągów szablonu dla strukturalny równoważności, wielkości liter jest ignorowany dla nazwy zmiennych i segmenty ścieżki, ciągi zapytań jest uwzględniana wielkość liter.

  • Ciągi zapytań są Nieuporządkowana.

UriTemplateTable Klasa reprezentuje asocjacyjne spis UriTemplate obiekty powiązane z przez wybranie obiektu dewelopera. A UriTemplateTable musi zawierać co najmniej jeden UriTemplate przed wywołaniem MakeReadOnly(Boolean). Zawartość UriTemplateTable można zmienić przed MakeReadOnly(Boolean) jest wywoływana. Sprawdzanie poprawności jest wykonywane podczas MakeReadOnly(Boolean) jest wywoływana. Wartość zależy od typu sprawdzania poprawności jest wykonywane allowMultiple parametr MakeReadOnly(Boolean).

Gdy MakeReadOnly(Boolean) jest wywoływana w przekazywany false, UriTemplateTable sprawdza, czy należy upewnić nie ma żadnych szablonów w tabeli. Jeśli zostaną znalezione żadne szablony strukturalnie równoważne, zgłasza wyjątek. Jest on używany w połączeniu z MatchSingle(Uri) Aby zapewnić tylko jeden szablon odpowiada przychodzących URI.

Gdy MakeReadOnly(Boolean) jest wywoływana przekazywanie w true, UriTemplateTable wiele, szablony strukturalnie równoważne, muszą być zawarte w UriTemplateTable.

Jeśli zestaw UriTemplate obiektów dodanych do UriTemplateTable zawierać ciągi zapytań nie może być niejednoznaczna. Ciągi zapytań identyczne są dozwolone.

System_CAPS_noteUwaga

Gdy UriTemplateTable umożliwia base adresy tego schematy Użyj innego niż HTTP, schemat i numer portu są ignorowane podczas dopasowywania candidate identyfikatory URI do szablonów.

Szablonów, które są równoważne ścieżkę udziału zawierać ciągi zapytań niejednoznaczny, jeśli istnieje identyfikator URI, który odpowiada więcej niż jeden szablon.

Następujące zestawy ciągi zapytań są jednoznaczne między sobą:

  • ? x = 1

  • ? x = 2

  • ? x = 3

  • ? x = 1 & y = {var}

  • ? x = 2 & z = {var}

  • ? x = 3

  • ? x = 1

  • ?

  • ? x = {var}

  • ?

  • ? m = get & c = rss

  • ? m = put & c = rss

  • ? m = get & c = atom

  • ? m = put & c = atom

Następujące zestawy szablonów ciągu zapytania są niejednoznaczne między sobą:

  • ? x = 1

  • ? x = {var}

"x = 1"-zgodny oba szablony.

  • ? x = 1

  • ? y = 2

"x = 1 & y = 2" odpowiada oba szablony. Jest to spowodowane ciągu zapytania może zawierać więcej zmiennych ciąg zapytania, a następnie dopasowuje szablonu.

  • ? x = 1

  • ? x = 1 & y = {var}

"x = 1 & y = 3" odpowiada oba szablony.

  • ? x = 3 & y = 4

  • ? x = 3 & z = 5

System_CAPS_noteUwaga

Α znaków i Α są traktowane jako różne znaki gdy są one wyświetlane jako część ścieżce identyfikatora URI lub UriTemplate segmentu ścieżki literału (ale znaki a i A są traktowane jako takie same). Α znaków i Α są traktowane jako takie same znaki gdy są one wyświetlane jako część a UriTemplate {variableName} lub ciąg zapytania (i a i A są również uważać za znaków).

Pokaż: