To pytanie istnieje, ponieważ ma znaczenie historyczne, ale nie jest uważane za dobre, tematyczne pytanie dla tej witryny, więc nie używaj go jako dowodu, że możesz zadawać podobne pytania tutaj.
Zawsze są funkcje przydatne w scenariuszach skrajnych, ale właśnie z tego powodu większość ludzi ich nie zna. Proszę o funkcje, których zwykle nie uczą podręczniki.
Zgoda. Uwielbiam takie wątki. Struktura jest tak głęboka, że czasami zdumiewa cię to, o czym nigdy nie wiedziałeś.
Deane
Uczę się tylu nowych fajnych sztuczek na podstawie odpowiedzi w tym wątku - dzięki! :)
Maxim Zaslavsky
16
Zamiast „Ukryte funkcje…” nie powinny być nazywane „mało znanymi funkcjami…”, ponieważ większość każdej odpowiedzi jest dobrze udokumentowana w MSDN lub gdzie indziej, po prostu mało znana lub używana.
Naprawdę? Właśnie miałem zainstalować fałszywy serwer SMTP, taki jak Dumbster. Ukryłem klejnot.
Eduardo Molteni,
2
Czy ktoś wie, czy możesz określić udział UNC dla lokalizacji katalogu?
Mark Sherretta
32
Jeszcze lepiej, umieść to na dev box machine.config, abyś nie musiał zmieniać web.config w każdej tworzonej aplikacji.
Max Toro
Czy możesz to ustawić tak, aby działało to tylko na lokalnym hoście? W ten sposób nie musisz go zmieniać za każdym razem?
chobo2,
Nie ma na to żadnego ustawienia. Będziesz musiał zarządzać różnic konfiguracyjnych za pomocą innych metod (projekty, zadania wdrażania sieci budować, etc)
John Sheehan
210
Jeśli umieścisz plik o nazwie app_offline.htm
w katalogu głównym katalogu aplikacji WWW, ASP.NET 2.0+ zamknie aplikację i zatrzyma normalne przetwarzanie wszelkich nowych przychodzących żądań dla tej aplikacji, pokazując tylko zawartość app_offline.htm plik dla wszystkich nowych wniosków .
Jest to najszybszy i najłatwiejszy sposób wyświetlenia powiadomienia „Witryna tymczasowo niedostępna” podczas ponownego wdrażania (lub wycofywania) zmian na serwerze produkcyjnym.
Ponadto, jak zauważył Marksidad , upewnij się, że masz co najmniej 512 bajtów zawartości w pliku, aby IE6 poprawnie go renderował.
Auć! Zachowaj ostrożność podczas korzystania z tej funkcji w MOSS 2007. Będzie działać tylko w przypadku stron, do których uzyskano dostęp od czasu ostatniego ponownego uruchomienia IIS. Tak więc, jeśli dodasz tę stronę do wirtualnego katalogu głównego wss, a następnie spróbuj otworzyć stronę, do której wcześniej nie uzyskiwano dostępu, otrzymasz 404.
Marc
1
@Marc - Otrzymałem tę wskazówkę od Scotta Guthrie, jeśli czujesz się hojny, pomógłbyś wielu deweloperom SharePoint uniknąć tego scenariusza, jeśli skomentowałeś artykuł Gu: weblogs.asp.net/scottgu/archive/2005/10/ 06 / 426755.aspx
Troy DeMonbreun
Ponadto spowoduje to również ponowne uruchomienie domeny aplikacji i zamknie wszystkie otwarte połączenia z bazą danych po zakończeniu wszystkich żądań.
Bart Verkoeijen
Jest jedno zastrzeżenie: IIS zwraca zawartość app_offline.htm z kodem stanu HTTP 404. Jeśli wyszukiwarka wędruje i spróbuje zaindeksować witrynę, gdy jesteś w trybie offline, możesz nie docenić wyników. Ale działa świetnie w mojej prywatnej korporacyjnej aplikacji internetowej!
Niektórzy programiści mogą argumentować, że lepiej jest ręcznie owijać rzeczy w HttpContext.Response, zamiast zgłaszać wyjątek, który jest dość kosztowną operacją w książkach .NET.
lubos hasko
Czy to nie jest zła forma? Wyświetlany jest błąd 404, podczas gdy chcesz wyświetlić błąd / wyjątek.
Donnie Thomas
1
Jednym z przykładów, o których mogę pomyśleć, jest to, że jeśli ktoś złośliwie psuje parametry i wprowadza coś nieprawidłowego, prawdopodobnie chcesz, aby ogólny błąd 404 nie był konkretnym błędem.
John Sheehan
3
Pozytywnie oceniany, ponieważ teraz jestem świadomy witryny .NET Tip of the Day.
Kon
działa tylko wtedy, gdy wrzucisz go do httpModule lub httpHandler
Khaled Musaied
75
Oto najlepszy. Dodaj to do pliku web.config, aby uzyskać DUŻO szybszą kompilację. To jest po 3.5SP1 za pośrednictwem tego QFE .
<compilationoptimizeCompilations="true">
Szybkie podsumowanie: wprowadzamy nowy przełącznik optimizeCompilations w ASP.NET, który może znacznie poprawić szybkość kompilacji w niektórych scenariuszach. Istnieje kilka połowów, więc czytaj dalej, aby uzyskać więcej informacji. Ten przełącznik jest obecnie dostępny jako QFE dla 3.5SP1 i będzie częścią VS 2010.
System kompilacji ASP.NET przyjmuje bardzo konserwatywne podejście, które powoduje, że usuwa wszelkie poprzednie prace, które wykonał za każdym razem, gdy zmienia się plik „najwyższego poziomu”. Pliki „najwyższego poziomu” zawierają wszystko w bin i App_Code, a także global.asax. Chociaż działa to dobrze w przypadku małych aplikacji, staje się prawie bezużyteczne w przypadku bardzo dużych aplikacji. Np. Klient wpadł na przypadek, w którym odświeżenie strony zajęło 10 minut po wprowadzeniu jakichkolwiek zmian w zestawie „bin”.
Aby złagodzić ból, dodaliśmy „zoptymalizowany” tryb kompilacji, który przyjmuje znacznie mniej konserwatywne podejście do ponownej kompilacji.
Czy jest to „domyślnie włączone” w VS 2010, czy powinienem to wypróbować?
M4N,
73
HttpContext.Current zawsze zapewnia dostęp do żądania / odpowiedzi / bieżącego kontekstu, nawet gdy nie masz dostępu do właściwości strony (np. Z luźno powiązanej klasy pomocnika).
Możesz kontynuować wykonywanie kodu na tej samej stronie po przekierowaniu użytkownika na inny, wywołując Response.Redirect ( url , false )
Nie potrzebujesz plików .ASPX , jeśli wszystko, czego potrzebujesz, to skompilowana strona (lub dowolny IHttpHandler ). Wystarczy ustawić ścieżkę i metody HTTP, aby wskazywały klasę w <httpHandlers>elemencie pliku web.config.
Obiekt strony można pobrać programowo z pliku .ASPX , wywołując PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
About Response.Redirect (url, false) - To tyle, na co liczyłem od dłuższego czasu .. Nie wiem, jak to przegapiłem, ale thanxxx
Subliminal Hash
1
Czy ktoś może wyjaśnić, co byś z tym zrobił? Wiem, że to ma jakąś wartość, ale nie mogę zrozumieć, dlaczego ...
Deane
5
Jeśli chcesz przekierować użytkownika na inny adres, ale nadal masz trochę przetwarzania zaplecza (np. Żądanie generowania raportu, które przekierowuje na stronę statusu generowania raportu, podczas gdy nadal generuje raport w tle)
Mark Cidade
Czy ktoś może wyjaśnić użyteczną sytuację dla PageParser.GetCompiledPageInstance (..)? Dokumenty mówią, że jest do użytku w infrastrukturze - zwraca typ IHttpHandler, więc nie widzę, jak można go praktycznie wykorzystać.
John K,
@jdk: Używałem go w przeszłości podczas nadpisywania domyślnego modułu obsługi żądań * .aspx, dzięki czemu mogę używać dynamicznych obiektów IHttpHandler w pamięci, ale także używać GetCompiledPageInstance () dla fizycznych plików * .aspx.
Mark Cidade
70
Tryb sprzedaży detalicznej na poziomie machine.config:
Zastępuje ustawienia web.config, aby wymusić debugowanie na false, włącza niestandardowe błędy i wyłącza śledzenie. Nie musisz już zapominać o zmianie atrybutów przed opublikowaniem - po prostu pozostaw je wszystkie skonfigurowane dla środowisk programistycznych lub testowych i zaktualizuj ustawienia produkcji detalicznej.
Czasami zapominam zmienić debugowanie kompilacji na false przed opublikowaniem, co negatywnie wpływa na wydajność. Nie ma już problemu!
Roy Tinker,
59
Włączanie intellisense dla MasterPages na stronach z treściami
Jestem pewien, że jest to bardzo mało znany hack
W większości przypadków musisz użyć metody findcontrol i rzucić formanty na stronie wzorcowej ze stron zawartości, gdy chcesz ich użyć, dzięki dyrektywie MasterType włączysz intellisense w Visual Studio, gdy tylko to zrobisz.
Osobiście uważam, że funkcja powinna pozostać nieznana, łączy stronę ze stroną główną. Jeśli w końcu użyjesz właściwości / metod strony głównej, a następnie zmienisz stronę główną, skończysz koszmarem konserwacji.
Phill
@Phil: Czasami jest to potrzebne i posiadanie statycznie wpisanego dostępu do strony głównej jest znacznie lepsze niż podejście FindControl. Przynajmniej dostaniesz komunikat kompilatora i możesz go szybko naprawić.
Durden81
58
HttpContext.Items jako narzędzie buforujące na poziomie żądania
To też będzie mój punkt, używam tego w kontrolerach zagnieżdżonych do przekazywania / odbierania informacji o poziomie żądania. Używam tego również w MVC do przechowywania listy plików js do dołączenia, opartych na widokach częściowych.
Tracker1
1
Używam tego, gdy używam routingu asp.net do przekazywania parametrów pobranych z adresów URL na moje strony. (nie w przypadku MVC) doskonale nadaje się do przepisywania adresów URL i jest dość elastyczny.
Alexandre Brisebois,
Hmmmm, właśnie pomyślałem o miejscu, w którym mógłbym użyć tego zamiast sesji - ta!
Mike Kingscott,
52
Dwie rzeczy wyróżniają się w mojej głowie:
1) Możesz włączyć lub wyłączyć Śledzenie za pomocą kodu:
Głosowałbym za tym, ale zabrakło mi głosów. Spróbuję i pamiętam, aby wrócić i zagłosować w tej sprawie. Nie wiedziałem, że możemy mieć ten sam plik Code Behind dla wielu stron. Nie jestem pewien, jak to by działało.
Vaibhav,
5
Czy ktoś jeszcze uważa, że aktywacja śledzenia z adresu URL stanowi zagrożenie bezpieczeństwa? (# 1) Nie zamierzam głosować za tym pytaniem, ale ważne jest, aby zrozumieć ryzyko.
Kevin Goff,
5
Absolutnie powinieneś naprawdę umieścić ten kod w bloku #ifdef DEBUG #endif
Radu094,
Świetne komentarze, wskazujące na aspekt bezpieczeństwa.
Vaibhav,
2
Dlaczego aktywowanie śledzenia z adresu URL jest zagrożeniem dla bezpieczeństwa? Jak można go zranić?
Kamarey,
48
Możesz użyć:
Request.Params[Control.UniqueId]
Aby uzyskać wartość kontrolki PRZED zainicjalizowaniem stanu widoku (Control.Text itp. Będzie pusty w tym momencie).
Inicjalizacja Viewstate nie działa z Request.Params. Użyj go PRZED podniesieniem metody LoadPostData kontroli zaimplementowanej IPostBackDataHandler.
chapluck,
46
WebMethods.
Można używać wywołań zwrotnych AJAX ASP.NET do metod sieciowych umieszczonych na stronach ASPX. Możesz ozdobić metodę statyczną za pomocą atrybutów [WebMethod ()] i [ScriptMethod ()]. Na przykład:
Mapowanie znaczników umożliwia zamianę zgodnych elementów sterujących w czasie kompilacji na każdej stronie aplikacji internetowej. Przydatnym przykładem jest sytuacja, w której masz zapasową kontrolkę ASP.NET, taką jak DropDownList, i chcesz zastąpić ją niestandardową kontrolką pochodzącą z DropDownList. Może to być formant, który został dostosowany w celu zapewnienia bardziej zoptymalizowanego buforowania danych wyszukiwania. Zamiast edytować każdy formularz internetowy i zastępować wbudowane DropDownLists niestandardową wersją, możesz w efekcie wykonać ASP.NET, modyfikując web.config:
Byłoby to bardzo mylące dla innych programistów w twoim zespole
Aykut Akıncı
1
@Aykut - Rzeczywiście może tak być, dlatego stwierdzam, że jego użyteczność jest raczej wąska, jednak w razie potrzeby bardzo przydatna. Chciałbym również upewnić się, że wszelkie użycie mapowania tagów było bardzo wyraźnie udokumentowane, aby uniknąć nieporozumień i dwuznaczności.
CraigTP
43
HttpModules . Architektura jest szalenie elegancka. Może nie jest to ukryta funkcja, ale mimo wszystko fajna.
HttpModules jest czymś zaawansowanym, ale nie nazwałbym tego rzadkim lub rzadziej używanym (lub nazwałby mnie naiwnym). Ale tak, kocham architekturę.
Vaibhav,
+1, ponieważ wielu doświadczonych programistów może wiedzieć o HttpModules, ale nie w pełni rozumie ich związek z żądaniami. (To samo z HttpHandlers)
John Bubriski
34
Za pomocą komentarzy ASP.NET na stronie .aspx można komentować pełne części strony, w tym kontrolki serwera. Treść skomentowana nigdy nie zostanie wysłana do klienta.
Prawdziwe piękno konstruktora wyrażeń kodu polega na tym, że można używać wiązania danych jak wyrażeń w sytuacjach niezwiązanych z danymi. Możesz także tworzyć inne Konstruktory wyrażeń, które wykonują inne funkcje.
+1, naprawdę fajna funkcja ... To właściwie całkiem podobne do rozszerzeń WPF
Thomas Levesque
czy to nie to samo, co używanie <%= /*code*/ %>?
bevacqua
33
Użycie typu pliku ASHX:
Jeśli chcesz po prostu wyprowadzić jakiś podstawowy HTML lub XML bez przechodzenia przez procedury obsługi zdarzeń strony, możesz zaimplementować HttpModule w prosty sposób
Nazwij stronę jako SomeHandlerPage.ashx i po prostu umieść w niej poniższy kod (tylko jeden wiersz)
Warto zauważyć, że należy dodać IRequiresSessionState lub IReadOnlySessionState, jeśli jest to potrzebne, w przeciwnym razie go nie będzie.
Tracker1
3
Warto również zauważyć, że możesz określić konfigurację modułu obsługi w pliku web.config, więc nie musisz mieć fizycznego pliku ashx. Lub możesz zarejestrować programowo program obsługi w aplikacji start w globalnym asaxie.
Pracowałem nad aplikacją asp.net, która przeszła audyt bezpieczeństwa prowadzony przez wiodącą firmę ochroniarską i nauczyłem się tej prostej sztuczki, aby zapobiec mniej znanej, ale ważnej luce w zabezpieczeniach.
Rozważ użycie Page.ViewStateUserKey do przeciwdziałania atakom za pomocą jednego kliknięcia. Jeśli uwierzytelniasz osoby dzwoniące i używasz ViewState, ustaw właściwość Page.ViewStateUserKey w module obsługi zdarzeń Page_Init, aby zapobiec atakom za pomocą jednego kliknięcia.
Ustaw właściwość na wartość, o której wiesz, że jest unikalna dla każdego użytkownika, na przykład identyfikator sesji, nazwę użytkownika lub identyfikator użytkownika.
Atak jednym kliknięciem ma miejsce, gdy osoba atakująca utworzy stronę internetową (.htm lub .aspx) zawierającą ukryte pole formularza o nazwie __VIEWSTATE, które jest już wypełnione danymi ViewState. ViewState można wygenerować ze strony wcześniej utworzonej przez atakującego, takiej jak strona koszyka na zakupy zawierająca 100 elementów. Atakujący zwabia niczego niepodejrzewającego użytkownika do przeglądania strony, a następnie atakujący powoduje wysłanie strony na serwer, na którym poprawne jest ViewState. Serwer nie może wiedzieć, że ViewState pochodzi od atakującego. Sprawdzanie poprawności ViewState i HMAC nie przeciwdziałają temu atakowi, ponieważ ViewState jest prawidłowy, a strona jest wykonywana w kontekście bezpieczeństwa użytkownika.
Ustawiając właściwość ViewStateUserKey, gdy osoba atakująca przejdzie do strony w celu utworzenia ViewState, właściwość jest inicjowana na swoje imię. Gdy uprawniony użytkownik prześle stronę na serwer, zostaje ona zainicjowana nazwą atakującego. W rezultacie sprawdzenie ViewMate HMAC kończy się niepowodzeniem i generowany jest wyjątek.
Pamiętaj również, aby opuścić bazę.OnInit (e); aby funkcja Page_Init () wykonała swoje zadanie.
Druid
Myślę, że ta sztuczka może się nie powieść, jeśli prawdziwy użytkownik nie zaakceptuje plików cookie lub jeśli sessionid ma limit czasu.
Aristos
1
Nie potrzebujesz, base.OnInit(e);jeśli używasz AutoEventWireup="true"strony.
Adam Nofsinger
1
Druid: Nie zastępuje OnInit (w takim przypadku konieczne byłoby base.OnInit (e)).
crdx
Używanie identyfikatora sesji dla ViewStateUserKey działa tylko po faktycznym rozpoczęciu sesji. Oznacza to również, że strony te mogą przekroczyć limit czasu po zakończeniu sesji. W przypadkach, w których problemy te dotyczą, możesz rozważyć użycie czegoś bardziej trwałego, na przykład adresu IP użytkownika.
Jest to świetne do określania, które skrypty mają być generowane (wersje minimalne lub pełne) lub cokolwiek innego, czego możesz chcieć w dev, ale nie na żywo.
Używanie configSource do dzielenia plików konfiguracyjnych.
Możesz użyć atrybutu configSource w pliku web.config, aby wypchnąć elementy konfiguracji do innych plików .config, na przykład zamiast:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
... możesz mieć całą sekcję appSettings zapisaną w innym pliku konfiguracyjnym. Oto nowe web.config:
<appSettingsconfigSource="myAppSettings.config"/>
myAppSettings.configPliku:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
Jest to bardzo przydatne w scenariuszach, w których wdrażasz aplikację na kliencie i nie chcesz, aby ingerował w sam plik web.config i po prostu chciał, aby mogli zmienić tylko kilka ustawień.
Domyślnie każda zawartość między znacznikami dla formantu niestandardowego jest dodawana jako formant podrzędny. Można to przechwycić w przesłonięciu AddParsedSubObject () w celu filtrowania lub dodatkowej analizy (np. Zawartości tekstu w LiteralControls):
Jeśli program ASP.NET generuje kanał RSS, czasami umieści dodatkowy wiersz na górze strony. To nie sprawdza się w przypadku popularnych walidatorów RSS. Możesz obejść ten problem, umieszczając dyrektywę strony <@Page>na dole strony.
Czy nie lepiej byłoby użyć programu .ASHX do generowania kanałów RSS?
Dan Diplo
Myślę, że to zależy od złożoności projektu. Nie każdy ma zdolność lub umiejętności do tworzenia i kompilowania programów obsługi. Na stronie asp.net działa do tego całkiem dobrze
Kevin Goff,
1
I możesz użyć czegoś takiego jak <asp: Repeater> do generowania elementów RSS i robienia innych sztuczek (takich jak używanie LogInView do usuwania niektórych elementów), co jest znacznie lepsze niż pisanie ciągów z ASHX IMO
chakrit
LinqToXml + ASHX to najlepsza droga!
Carlos Muñoz
Jest to przydatne do znacznie więcej niż generowania kanału RSS. IIRC, HTML5 musi mieć znacznik <! Doctype html> w pierwszym wierszu u góry, aby poprawnie sprawdzić poprawność.
Roy Tinker,
12
Przed dodaniem tras przez program ASP.NET v3.5 można utworzyć własne przyjazne adresy URL, pisząc moduł HTTP i przepisując żądanie na początku potoku strony (np. Zdarzenie BeginRequest).
DotNetNuke ma naprawdę dobry HttpModule, który robi to dla swoich przyjaznych adresów URL. Nadal jest przydatny na komputerach, na których nie można wdrożyć .NET v3.5.
Odpowiedzi:
Podczas testowania możesz wysyłać wiadomości e-mail do folderu na komputerze zamiast na serwer SMTP. Umieść to w swoim web.config:
źródło
Jeśli umieścisz plik o nazwie app_offline.htm w katalogu głównym katalogu aplikacji WWW, ASP.NET 2.0+ zamknie aplikację i zatrzyma normalne przetwarzanie wszelkich nowych przychodzących żądań dla tej aplikacji, pokazując tylko zawartość app_offline.htm plik dla wszystkich nowych wniosków .
Jest to najszybszy i najłatwiejszy sposób wyświetlenia powiadomienia „Witryna tymczasowo niedostępna” podczas ponownego wdrażania (lub wycofywania) zmian na serwerze produkcyjnym.
Ponadto, jak zauważył Marksidad , upewnij się, że masz co najmniej 512 bajtów zawartości w pliku, aby IE6 poprawnie go renderował.
źródło
To zostanie przechwycone przez ASP.NET, który zwróci stronę customErrors. Dowiedziałem się o tym w ostatnim poście .NET Tip of the Day Post
źródło
Oto najlepszy. Dodaj to do pliku web.config, aby uzyskać DUŻO szybszą kompilację. To jest po 3.5SP1 za pośrednictwem tego QFE .
Via tutaj :
źródło
HttpContext.Current zawsze zapewnia dostęp do żądania / odpowiedzi / bieżącego kontekstu, nawet gdy nie masz dostępu do właściwości strony (np. Z luźno powiązanej klasy pomocnika).
Możesz kontynuować wykonywanie kodu na tej samej stronie po przekierowaniu użytkownika na inny, wywołując Response.Redirect ( url , false )
Nie potrzebujesz plików .ASPX , jeśli wszystko, czego potrzebujesz, to skompilowana strona (lub dowolny IHttpHandler ). Wystarczy ustawić ścieżkę i metody HTTP, aby wskazywały klasę w
<httpHandlers>
elemencie pliku web.config.Obiekt strony można pobrać programowo z pliku .ASPX , wywołując PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context)
źródło
Tryb sprzedaży detalicznej na poziomie machine.config:
Zastępuje ustawienia web.config, aby wymusić debugowanie na false, włącza niestandardowe błędy i wyłącza śledzenie. Nie musisz już zapominać o zmianie atrybutów przed opublikowaniem - po prostu pozostaw je wszystkie skonfigurowane dla środowisk programistycznych lub testowych i zaktualizuj ustawienia produkcji detalicznej.
źródło
Włączanie intellisense dla MasterPages na stronach z treściami
Jestem pewien, że jest to bardzo mało znany hack
W większości przypadków musisz użyć metody findcontrol i rzucić formanty na stronie wzorcowej ze stron zawartości, gdy chcesz ich użyć, dzięki dyrektywie MasterType włączysz intellisense w Visual Studio, gdy tylko to zrobisz.
po prostu dodaj do strony jeszcze jedną dyrektywę
Jeśli nie chcesz korzystać z wirtualnej ścieżki i zamiast tego użyj nazwy klasy
Pobierz pełny artykuł tutaj
źródło
HttpContext.Items jako narzędzie buforujące na poziomie żądania
źródło
Dwie rzeczy wyróżniają się w mojej głowie:
1) Możesz włączyć lub wyłączyć Śledzenie za pomocą kodu:
2) Możesz zbudować wiele stron .aspx przy użyciu tylko jednego udostępnionego pliku „zakodowanego”.
Zbuduj jeden plik .cs klasy:
a następnie możesz mieć dowolną liczbę stron .aspx (po usunięciu kodu .designer.cs i .cs wygenerowanego przez VS):
Możesz mieć kontrolki w ASPX, które nie pojawiają się w klasie 1 i na odwrót, ale musisz pamiętać, aby sprawdzić, czy nie ma w nich kontroli.
źródło
Możesz użyć:
Aby uzyskać wartość kontrolki PRZED zainicjalizowaniem stanu widoku (Control.Text itp. Będzie pusty w tym momencie).
Jest to przydatne dla kodu w Init.
źródło
WebMethods.
Można używać wywołań zwrotnych AJAX ASP.NET do metod sieciowych umieszczonych na stronach ASPX. Możesz ozdobić metodę statyczną za pomocą atrybutów [WebMethod ()] i [ScriptMethod ()]. Na przykład:
Teraz na stronie ASPX możesz to zrobić:
I wywołaj metodę po stronie serwera za pomocą JavaScript, używając:
źródło
Przed rozpoczęciem długotrwałego zadania sprawdź, czy klient jest nadal podłączony:
źródło
Jedną mało znaną i rzadko używaną funkcją ASP.NET jest:
Mapowanie tagów
Jest rzadko używany, ponieważ jest tylko konkretna sytuacja, w której będziesz go potrzebować, ale gdy go potrzebujesz, jest to bardzo przydatne.
Niektóre artykuły o tej mało znanej funkcji:
Mapowanie znaczników w ASP.NET
Korzystanie z mapowania znaczników w ASP.NET 2.0
i z tego ostatniego artykułu:
źródło
HttpModules . Architektura jest szalenie elegancka. Może nie jest to ukryta funkcja, ale mimo wszystko fajna.
źródło
Za pomocą komentarzy ASP.NET na stronie .aspx można komentować pełne części strony, w tym kontrolki serwera. Treść skomentowana nigdy nie zostanie wysłana do klienta.
źródło
Konstruktor wyrażeń kodowych
Przykładowy znacznik:
Prawdziwe piękno konstruktora wyrażeń kodu polega na tym, że można używać wiązania danych jak wyrażeń w sytuacjach niezwiązanych z danymi. Możesz także tworzyć inne Konstruktory wyrażeń, które wykonują inne funkcje.
web.config:
Klasa cs, która sprawia, że wszystko się dzieje:
źródło
<%= /*code*/ %>
?Użycie typu pliku ASHX:
Jeśli chcesz po prostu wyprowadzić jakiś podstawowy HTML lub XML bez przechodzenia przez procedury obsługi zdarzeń strony, możesz zaimplementować HttpModule w prosty sposób
Nazwij stronę jako SomeHandlerPage.ashx i po prostu umieść w niej poniższy kod (tylko jeden wiersz)
Następnie plik kodu
źródło
Ustawianie właściwości sterowania serwerem na podstawie przeglądarki docelowej i nie tylko .
Ten jeden rodzaj mnie zaskoczył.
źródło
System.Web.VirtualPathUtility
źródło
Pracowałem nad aplikacją asp.net, która przeszła audyt bezpieczeństwa prowadzony przez wiodącą firmę ochroniarską i nauczyłem się tej prostej sztuczki, aby zapobiec mniej znanej, ale ważnej luce w zabezpieczeniach.
Poniższe wyjaśnienie pochodzi z: http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Rozważ użycie Page.ViewStateUserKey do przeciwdziałania atakom za pomocą jednego kliknięcia. Jeśli uwierzytelniasz osoby dzwoniące i używasz ViewState, ustaw właściwość Page.ViewStateUserKey w module obsługi zdarzeń Page_Init, aby zapobiec atakom za pomocą jednego kliknięcia.
Ustaw właściwość na wartość, o której wiesz, że jest unikalna dla każdego użytkownika, na przykład identyfikator sesji, nazwę użytkownika lub identyfikator użytkownika.
Atak jednym kliknięciem ma miejsce, gdy osoba atakująca utworzy stronę internetową (.htm lub .aspx) zawierającą ukryte pole formularza o nazwie __VIEWSTATE, które jest już wypełnione danymi ViewState. ViewState można wygenerować ze strony wcześniej utworzonej przez atakującego, takiej jak strona koszyka na zakupy zawierająca 100 elementów. Atakujący zwabia niczego niepodejrzewającego użytkownika do przeglądania strony, a następnie atakujący powoduje wysłanie strony na serwer, na którym poprawne jest ViewState. Serwer nie może wiedzieć, że ViewState pochodzi od atakującego. Sprawdzanie poprawności ViewState i HMAC nie przeciwdziałają temu atakowi, ponieważ ViewState jest prawidłowy, a strona jest wykonywana w kontekście bezpieczeństwa użytkownika.
Ustawiając właściwość ViewStateUserKey, gdy osoba atakująca przejdzie do strony w celu utworzenia ViewState, właściwość jest inicjowana na swoje imię. Gdy uprawniony użytkownik prześle stronę na serwer, zostaje ona zainicjowana nazwą atakującego. W rezultacie sprawdzenie ViewMate HMAC kończy się niepowodzeniem i generowany jest wyjątek.
źródło
base.OnInit(e);
jeśli używaszAutoEventWireup="true"
strony.HttpContext.Current.IsDebuggingEnabled
Jest to świetne do określania, które skrypty mają być generowane (wersje minimalne lub pełne) lub cokolwiek innego, czego możesz chcieć w dev, ale nie na żywo.
źródło
Zawarte w ASP.NET 3.5 SP1:
źródło
Właściwość DefaultButton w panelach.
Ustawia domyślny przycisk dla określonego panelu.
źródło
ScottGu ma kilka sztuczek na http://weblogs.asp.net/scottgu/archive/2006/04/03/441787.aspx
źródło
Używanie configSource do dzielenia plików konfiguracyjnych.
Możesz użyć atrybutu configSource w pliku web.config, aby wypchnąć elementy konfiguracji do innych plików .config, na przykład zamiast:
... możesz mieć całą sekcję appSettings zapisaną w innym pliku konfiguracyjnym. Oto nowe
web.config
:myAppSettings.config
Pliku:Jest to bardzo przydatne w scenariuszach, w których wdrażasz aplikację na kliencie i nie chcesz, aby ingerował w sam plik web.config i po prostu chciał, aby mogli zmienić tylko kilka ustawień.
ref: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
źródło
Atrybut MaintainScrollPositionOnPostback w dyrektywie strony. Służy do utrzymania pozycji przewijania strony aspx w postbackach.
źródło
HttpContext.IsCustomErrorEnabled to fajna funkcja, która okazała się przydatna więcej niż raz. Oto krótki post na ten temat.
źródło
Domyślnie każda zawartość między znacznikami dla formantu niestandardowego jest dodawana jako formant podrzędny. Można to przechwycić w przesłonięciu AddParsedSubObject () w celu filtrowania lub dodatkowej analizy (np. Zawartości tekstu w LiteralControls):
...
źródło
Jeśli program ASP.NET generuje kanał RSS, czasami umieści dodatkowy wiersz na górze strony. To nie sprawdza się w przypadku popularnych walidatorów RSS. Możesz obejść ten problem, umieszczając dyrektywę strony
<@Page>
na dole strony.źródło
Przed dodaniem tras przez program ASP.NET v3.5 można utworzyć własne przyjazne adresy URL, pisząc moduł HTTP i przepisując żądanie na początku potoku strony (np. Zdarzenie BeginRequest).
Adresy URL takie jak http: // nazwa_serwera / strona / Param1 / SomeParams1 / Param2 / SomeParams2 zostaną zmapowane na inną stronę, jak poniżej (często przy użyciu wyrażeń regularnych).
DotNetNuke ma naprawdę dobry HttpModule, który robi to dla swoich przyjaznych adresów URL. Nadal jest przydatny na komputerach, na których nie można wdrożyć .NET v3.5.
źródło