Strona klasowa. Ten szablon projektu będzie dostępny na wszystkich stronach z treścią

Klasa strony

Teraz, kiedy zobaczyłeś, co to jest koło życia page i dowiedziałeś się, w jaki sposób strona zawiera kontrolki, nie zaszkodzi wskazać, że sama strona jest również tworzona jako obiekt kontrolny. W rzeczywistości wszystkie formularze internetowe są tak naprawdę instancjami klasy Page z ASP.NET, która znajduje się w przestrzeni nazw System.Web.UI.

Prawdopodobnie już się tego domyśliłeś, zauważając, że każda klasa związana z kodem wyraźnie dziedziczy z System.Web.UI.Page. Oznacza to, że każdy utworzony formularz internetowy natychmiast zyskuje ogromną funkcjonalność, taką jak znana wcześniej metoda FindControl() i właściwość IsPostBack. Ponadto dziedziczenie po Page daje również Twojemu kodowi dostęp do następujących niezwykle przydatnych właściwości:

Wiele z tych właściwości odpowiada obiektom wewnętrznym, których można używać na klasycznych stronach internetowych ASP.NET. Jednak w klasycznej ASP dostęp do tej funkcjonalności odbywał się poprzez wbudowane obiekty, które były zawsze dostępne. W ASP.NET każdy z tych wbudowanych obiektów faktycznie odpowiada właściwości Page, która zapewnia instancję w pełni funkcjonalnej klasy.

Obiekty te zostały szczegółowo opisane w kolejnych rozdziałach.

Obiekty sesji, aplikacji i pamięci podręcznej

Obiekt Session jest instancją klasy System.Web.SessionState.HttpSessionState. Został zaprojektowany do przechowywania dowolnego rodzaju danych użytkownika, które muszą być zachowywane pomiędzy żądaniami stron internetowych. Obiekt Session zapewnia dostęp słownikowy do zestawu par nazwa-wartość reprezentujących dane użytkownika dla tej sesji. Stan sesji jest często używany do przechowywania informacji, takich jak nazwa i identyfikator użytkownika, koszyk na zakupy lub inne elementy, które są usuwane, gdy użytkownik nie odwiedza już stron internetowych.

Obiekt Application jest instancją klasy System.Web.HttpApplicationState. Podobnie jak obiekt Session, jest on także słownikiem danych nazwa-wartość. Dane te mają jednak charakter globalny dla całej aplikacji.

Jeśli chodzi o obiekt Cache, jest to instancja klasy System.Web.Caching.Cache. Przechowuje także informacje globalne, ale oferuje bardziej skalowalny mechanizm przechowywania, ponieważ ASP.NET może usuwać obiekty, jeśli na serwerze zabraknie pamięci. Podobnie jak inne zestawy stanów, jest to zasadniczo zbiór obiektów nazwa-wartość, ale można także ustawić niestandardowe zasady wygasania i definiować zależności dla każdego elementu.

Wybór sposobu wdrożenia zarządzania stanem jest jednym z kluczowych zadań podczas tworzenia aplikacji internetowej.

Obiekt żądania

Obiekt Request jest instancją klasy System.Web.HttpRequest. Obiekt ten reprezentuje wartości i właściwości żądania HTTP, które spowodowało załadowanie strony. Zawiera wszystkie parametry dotyczące adresu URL, a także wszystkie inne dane, które zostały przesłane przez klienta. Duża część informacji dostarczanych przez obiekt Request jest opakowana w więcej abstrakcji wysoki poziom(na przykład opakowanie modelu kontroli sieci ASP.NET), więc nie jest to tak ważne, jak w przypadku klasycznego programowania ASP.

Obiekt Request można jednak w dalszym ciągu wykorzystać np. do sprawdzenia, z jakiej przeglądarki korzysta klient, czy też do utworzenia plików cookies, a następnie sprawdzenia ich zawartości.

Poniższa tabela zawiera listę najczęściej używanych właściwości obiektu Request:

Właściwości obiektu HttpRequest Opis właściwości
AnonimowyID Unikalnie identyfikuje bieżącego użytkownika, jeśli włączono dostęp anonimowy.
Ścieżka aplikacji i Fizyczna ścieżka aplikacji ApplicationPath pobiera informacje o miejscu docelowym katalog wirtualny Aplikacja ASP.NET (URL), a PhysicalPath dotyczy lokalizacji jej „prawdziwego” katalogu
Przeglądarka Zawiera odwołanie do obiektu HttpBrowserCapabilities, który zawiera właściwości opisujące różne funkcjonalność przeglądarki, na przykład czy obsługuje elementy Kontrolki ActiveX, pliki cookie, skrypty VBScript i ramki
Certyfikat Klienta Obiekt HttpClientCertificate, który udostępnia certyfikat zabezpieczeń dla bieżącego żądania, jeśli taki istnieje
Ciasteczka Udostępnia zbiór plików cookie wysyłanych z tym żądaniem
FilePath i CurrentExecutionFilePath Zwróć rzeczywistą ścieżkę do pliku (względem serwera) dla pliku, w którym jest wykonywany ten moment strony. FilePath reprezentuje stronę, która rozpoczęła proces wykonywania. Jest to to samo, co CurrentExecutionFilePath, chyba że przeniosłeś użytkownika do Nowa strona bez przekierowania (na przykład przy użyciu metody Server.Transfer()), w którym to przypadku CurrentExecutionFilePath odzwierciedla nową stronę, a FilePath określa stronę oryginalną
Formularz Reprezentuje kolekcję zmienne formularza, odesłany z powrotem na stronę. W większości przypadków zamiast korzystać z danej kolekcji, pobierzesz tę informację z właściwości kontrolki
Nagłówki i zmienne serwera Podaj kolekcję słownikową nagłówków HTTP i zmiennych serwera, indeksowaną według nazwy. Zbiory te w dużej mierze składają się z informacji niskiego poziomu, które zostały wysłane przez przeglądarkę wraz z żądaniem internetowym (na przykład informacje o typie przeglądarki, obsługiwanych przez nią funkcjonalnościach, zainstalowanych ustawienia języka, tożsamości używane do uwierzytelniania danych itp.). Zazwyczaj informacje te można znacznie łatwiej uzyskać z innych właściwości obiektu HttpRequest lub klas wyższego poziomu ASP.NET
Jest uwierzytelniony i jest bezpiecznym połączeniem Zwróć wartość true, jeśli użytkownik został pomyślnie uwierzytelniony i jest połączony za pośrednictwem protokołu Secure Sockets Layer (SSL).
JestLokalny Zwraca wartość true, jeśli użytkownik zażąda strony z komputera lokalnego
ZapytanieCiąg Zawiera parametry przekazane w ciągu zapytania
Adres URL i adres URL Zwróć obiekt Uri reprezentujący bieżący adres strony i stronę, z której pochodzi użytkownik ( Poprzednia strona zawierający link do tej strony)
Agent użytkownika Ciąg reprezentujący typ przeglądarki. Internet Explorera udostępnia wartość MSIE dla tej właściwości. ASP.NET wykorzystuje te informacje, aby dowiedzieć się, jaki to typ przeglądarki, a tym samym określić, jakie funkcje ta przeglądarka powinna obsługiwać (takie jak pliki cookie, JavaScript itp.). To z kolei może mieć wpływ na sposób renderowania kontrolek sieciowych.
Adres hosta użytkownika i nazwa hosta użytkownika Pobiera informacje o adresie IP i nazwie DNS klient zdalny. Dostęp do tych informacji można również uzyskać za pośrednictwem kolekcji ServerVariables. Jednak ze względu na transmisję adresy sieciowe(Translacja adresów sieciowych - NAT) nie zawsze jest to istotne. W zależności od sposobu łączenia się z Internetem wielu klientów może mieć ten sam adres IP (na przykład adres IP komputera-bramy). Ponadto adres IP może również ulec zmianie po wykonaniu kilku żądań.
Języki użytkownika Udostępnia posortowaną tablicę ciągów zawierającą listę preferencji językowych klienta. Może być przydatny przy tworzeniu stron wielojęzycznych
Obiekt odpowiedzi

Obiekt Response jest instancją klasy System.Web.HttpResponse i reprezentuje odpowiedź serwera WWW na żądanie klienta. W klasycznym rozwoju ASP obiekt Response był jedynym sposobem programowego wysłania tekstu HTML do klienta.

Kontrolki serwera zawierają teraz zagnieżdżone metody obiektowe umożliwiające samodzielne renderowanie. Deweloper musi jedynie ustawić wartości swoich właściwości. Zatem obiekt Response nie jest już tak centralny jak kiedyś.

W poniższej tabeli wymieniono niektóre z najczęściej używanych elementów klasy HttpResponse:

Członkowie klasy HttpResponse Metoda lub właściwość Opis
Wyjście bufora Gdy ta właściwość jest ustawiona na true (wartość domyślna), strona nie jest wysyłana do klienta, dopóki nie zostanie wyrenderowana i gotowa do wysłania w całości, a nie w częściach. W niektórych konkretnych scenariuszach sensowne jest ustawienie tej właściwości na false.
Najbardziej oczywistym przykładem jest pobieranie przez klienta duży plik. Jeśli właściwość BufferOutput jest ustawiona na false, klient zobaczy okno dialogowe Zapisz i będzie mógł wybrać nazwę pliku przed jego całkowitym pobraniem
Pamięć podręczna Ta właściwość odwołuje się do obiektu HttpCachePolicy, który umożliwia skonfigurowanie buforowania danych wyjściowych
Ciasteczka Ta właściwość zapewnia dostęp do zbioru plików cookie wysyłanych wraz z odpowiedzią. Można go wykorzystać do dodania dodatkowych plików cookie
Wygasa i wygasaBezwzględnie Te właściwości mogą służyć do buforowania renderowanego kodu HTML strony, poprawiając wydajność kolejnych żądań.
CzyKlient jest podłączony Jest to wartość logiczna wskazująca, czy klient jest podłączony do serwera. Jeśli nie jest jeszcze podłączony, może być konieczne zatrzymanie niektórych długotrwałych operacji
Przeadresować() Ta metoda powoduje, że przeglądarka żąda innego adresu URL, który wskazuje nową stronę aplikacji internetowej lub inną witrynę internetową
PrzekierowanieStałe() Ta metoda przekierowuje przeglądarkę na nowy adres URL, podobnie jak metoda Redirect(). Różnica polega na tym, że używa kodu stanu HTTP 301 (który wskazuje, że strona została przeniesiona na stałe), a nie 302 (co oznacza, że ​​strona została tymczasowo przeniesiona)
RedirectToRoute() i RedirectToRoutePermanent() Metody te są podobne do metod Redirect() i RedirectPermanent(). Jedyna różnica polega na tym, że używają trasy (zarejestrowanego wzorca adresu URL, który nie jest mapowany bezpośrednio na stronę)
Przenosić() Ta metoda informuje ASP.NET o zatrzymaniu przetwarzania bieżąca strona i przejdź do nowej (określonej) strony z formularzem internetowym. W takim przypadku nie jest wymagany pełny cykl wysyłania oraz powiadomienie przeglądarki i użytkownika aplikacji internetowej
Wniosek o przeniesienie() Metoda ta jest podobna do metody Transfer(), ale umożliwia przeniesienie użytkownika na stronę innego typu. Można go na przykład użyć do wysłania użytkownika z formularza internetowego ASP.NET na stronę HTML.
Kiedy jest używany, cały potok IIS zostaje uruchomiony w celu przetworzenia nowego zasobu wraz ze wszystkimi powiązanymi modułami HTTP. Istnieje jednak wiele istotnych ograniczeń związanych z metodą TransferRequest(). Aby z niego skorzystać, należy używać serwera WWW IIS 7 w trybie zintegrowanym. Dodatkowo będziesz musiał zwolnić stan sesji (jeśli został uzyskany), aby zapobiec dużym opóźnieniom
Typ zawartości Ta właściwość reprezentuje nagłówek, który informuje przeglądarkę, jaki typ treści powinna otrzymać. Zazwyczaj formularze sieci Web ASP.NET, podobnie jak wszystkie strony internetowe, używają zawartości tekstowej/html (tekst zmieszany z HTML). Jednak w zasadzie można utworzyć specjalną procedurę obsługi HTTP do obsługi innych typów treści
Strumień wyjściowy Ta właściwość reprezentuje dane wysyłane do przeglądarki jako strumień bajtów niskiego poziomu. Można go używać do łączenia się z modelem wątków .NET
Pisać() Ta metoda umożliwia wpisanie tekstu bezpośrednio do strumienia odpowiedzi. Zwykle lepiej jest zamiast tego użyć modelu kontroli i pozwolić kontrolom wygenerować własne znaczniki HTML. Jeśli spróbujesz użyć metody Response.Write() z modelem kontrolnym, programista straci możliwość decydowania, gdzie tekst ma się znaleźć na stronie.
Metoda Response.Write() jest jednak istotna w sytuacjach, gdy kontrolki generujące własną reprezentację HTML muszą zostać zbudowane od podstaw
BinaryWrite() i WriteFile() Metody te umożliwiają pobranie zawartości binarnej z tablicy bajtów lub pliku i zapisanie jej bezpośrednio w strumieniu odpowiedzi. Nie ma sensu używać ich w połączeniu z kontrolkami serwera, ale mogą być bardzo przydatne podczas tworzenia niestandardowej procedury obsługi HTTP.
Można na przykład utworzyć procedurę obsługi HTTP, która odczytuje dane dokumentu PDF z wpisu w bazie danych i zapisuje je bezpośrednio w strumieniu odpowiedzi przy użyciu metody BinaryWrite(). Po stronie klienta wynik końcowy będzie wyglądał dokładnie tak samo, jakby użytkownik przesłał statyczny plik PDF. Pisząc treść inną niż HTML, pamiętaj o ustawieniu właściwości ContentType na odpowiednią wartość
Poruszaj się pomiędzy stronami

Bardzo ważna funkcja Klasa HttpResponse ma zapewnić niewielki zestaw metod umożliwiających nawigację z jednej strony na drugą. Najbardziej uniwersalną z nich jest metoda Redirect(), która pozwala na przekierowanie użytkownika na inną stronę. Poniżej przykład jego zastosowania:

// Przekieruj do pliku w bieżącym katalogu. Odpowiedź.Redirect("PageFlow.aspx"); // Przekierowanie na inną stronę internetową. Odpowiedź.Redirect("http://www.google.com");

Wymagana jest metoda Redirect(). pełny cykl wysyłanie. Zasadniczo wysyła wiadomość do przeglądarki, która powoduje żądanie nowej strony.

Metoda Redirect() ma przeciążenie, które jako drugi parametr przyjmuje wartość logiczną. Ta wartość określa, czy kod strony powinien być kontynuowany. Domyślnie, mimo że Redirect() przekierowuje użytkownika i zamyka połączenie, cały pozostały kod w metodzie będzie nadal wykonywany wraz z resztą zdarzeń strony. Umożliwia to czyszczenie w razie potrzeby. Jeśli jednak drugi parametr ma wartość true, ASP.NET natychmiast przestanie przetwarzać stronę, potencjalnie zmniejszając obciążenie serwera WWW.

Jeśli chcesz przenieść użytkownika do innego formularza internetowego w tej samej aplikacji internetowej, możesz zastosować szybsze podejście, używając metody Server.Transfer(). Jednak ta metoda ma pewne cechy szczególne. Ponieważ przekierowanie następuje po stronie serwera, oryginalny adres URL pozostaje w oknie przeglądarki klienta. Zasadniczo przeglądarka nie ma możliwości dowiedzenia się, że faktycznie wyświetla inną stronę. To ograniczenie powoduje problemy, gdy klient odświeża stronę lub dodaje ją do zakładek.

Ponadto metoda Server.Transfer() nie może przenieść kontroli na stronę inną niż ASP.NET lub stronę internetową znajdującą się w innej aplikacji internetowej lub witrynie internetowej.

Aby przejść z jednej strony na drugą, dostępna jest inna technika - publikowanie między stronami. Umożliwia utworzenie strony, która przesyła się do innej strony, umożliwiając przekazanie wszystkich informacji o stanie widoku i zawartości ewentualnych kontrolek.

W ASP.NET 4 klasa HttpResponse wprowadziła inną metodę przekierowania użytkownika - RedirectPermanent() . Ta metoda robi to samo, co Redirect(), tj. wysyła do przeglądarki komunikat o przekierowaniu wskazujący, że powinna ona zażądać nowej strony. Jednak zamiast kodu stanu HTTP 302 (tymczasowe przekierowanie) używa kodu 301 (który wskazuje stałe przekierowanie). Dla przeglądarek internetowych ta różnica nie ma znaczenia, ale dla wyszukiwarek jest bardzo istotna. Gdy szukaj robota przegląda witrynę i otrzymuje kod statusu 301, aktualizuje swój katalog wyszukiwarka, wypełniając go informacjami o nowym adresie URL.

Oznacza to, że metody Redirect() i RedirectPermanent() muszą być używane bardzo często różne sposoby. Metody Redirect() należy używać w celu zapewnienia normalnej nawigacji i kontroli przepływu w aplikacji (na przykład, gdy użytkownik przechodzi jakiś proces weryfikacji), a metody RedirectPermanent() należy używać w przypadku żądania starego adresu URL, który był wcześniej obsługiwany, ale nie jest już używany.

Zwykle metoda Redirect() zostanie wywołana gdzieś w kodzie formularza internetowego, natomiast metoda RedirectPermanent() zostanie wywołana w kodzie aplikacji, a dokładniej w metodzie Application_BeginRequest() znajdującej się w pliku global.asax. Umożliwi to zarządzanie wszystkimi stałymi przekierowaniami w jednym miejscu, bez konieczności przechowywania fragmentów starych stron. Poniżej znajduje się przykład:

Protected void Application_BeginRequest(object sender, EventArgs e) ( // Aplikacja internetowa nie zawiera już strony about.aspx if (Reguest.FilePath == "/about.aspx") ( Response.RedirectPermanent("/about/about-Us .aspx"); ) // (Dodaj tutaj dodatkowe przekierowania.) )

Obiekt serwera

Obiekt Server jest instancją klasy System.Web.HttpServerUtility i udostępnia różnorodne metody i właściwości pomocnicze, które wymieniono w tabeli:

Członkowie klasy HttpServerUtility Metoda lub właściwość Opis
Nazwa Maszyny Właściwość reprezentująca nazwę komputera, na którym działa strona. Jest to nazwa serwera WWW używanego przez komputer do identyfikacji go w pozostałej części sieci
GetLastError() Pobiera obiekt wyjątku dla najnowszego błędu (lub odwołanie o wartości null, jeśli takie nie istnieje). Ten błąd powinien wystąpić podczas przetwarzania bieżącego żądania i nie został obsłużony. Najczęściej używany w procedurze obsługi zdarzeń aplikacji, która sprawdza sytuacje awaryjne
HtmlEncode() i HtmlDecode() Zastępuje normalny ciąg prawidłowym ciągiem Znaki HTML(i wzajemnie)
UrlEncode() i UrlDecode() Zastępuje zwykły ciąg ciągiem prawidłowych znaków adresu URL (i odwrotnie)
MapaPath() Zwraca fizyczną ścieżkę pliku odpowiadającą określonej wirtualnej ścieżce pliku na serwerze WWW. Wywołanie MapPath() z / zwraca ścieżkę fizyczną do katalog główny Aplikacje internetowe. Obsługuje także ścieżki zawierające znak tyldy (~) reprezentujący katalog główny witryny internetowej (na przykład ~/homepage.aspx)
Przenosić() Przenosi wykonanie na inną stronę internetową w bieżącej aplikacji. Ta metoda jest podobna do metody Response.Redirect(), ale jest szybsza. Nie można go użyć do przeniesienia użytkownika do witryny znajdującej się na innym serwerze WWW lub do strony innej niż ASP.NET (takiej jak HTML lub ASP)

Najbardziej popularna jest metoda Transfer(). w szybki sposób przeniesienie użytkownika na inną stronę aplikacji. Podczas korzystania z tej metody nie następuje pełny cykl wysyłania. Zamiast tego silnik ASP.NET po prostu ładuje nową stronę i rozpoczyna jej przetwarzanie. Dzięki temu adres URL wyświetlany w przeglądarce Klienta nie ulega zmianie.

MapPath() to kolejna przydatna metoda obiektu Server. Załóżmy na przykład, że chcesz załadować plik o nazwie info.txt z bieżącego katalogu wirtualnego. Zamiast kodować ścieżkę na stałe, możesz użyć metody Server.MapPath() i użyć jej do konwersji względna ścieżka dostępu do aplikacji internetowej pełną ścieżką fizyczną.

Kodowanie HTML i URL

Klasa Server zawiera także metody konwertujące zwykłe stringi w reprezentację, którą można bezpiecznie wykorzystać jako część adresu URL lub wyświetlić na stronie internetowej. Załóżmy na przykład, że zamierzasz wyświetlić następujący tekst na stronie internetowej:

Etykietka

Służy do wskazania akapitu.

Jeśli spróbujesz zapisać te informacje na stronie lub umieścić je w kontrolce, otrzymasz następujące informacje:

Znacznik służy do identyfikacji akapitu.

Tekst

Nie pojawi się, a przeglądarka zinterpretuje go jako zawierający akapit. Aby obejść to automatyczne zachowanie, będziesz musiał przekonwertować potencjalnie problematyczne wartości na specjalne odpowiedniki HTML. Na przykład,< превратится в < в окончательной HTML-странице, а браузер отобразит этот символ как