Diese Frage existiert, weil sie historische Bedeutung hat, wird jedoch nicht als gute themenbezogene Frage für diese Site angesehen. Verwenden Sie sie daher nicht als Beweis dafür, dass Sie hier ähnliche Fragen stellen können.
Es gibt immer Funktionen, die in Rand-Szenarien nützlich wären, aber genau aus diesem Grund kennen die meisten Leute sie nicht. Ich bitte um Funktionen, die normalerweise nicht in den Lehrbüchern enthalten sind.
Gute Frage, ich wünschte, ich könnte mehrmals abstimmen!
Gavin Miller
1
Einverstanden. Ich liebe solche Themen. Das Framework hat so viel Tiefe, dass Sie manchmal erstaunt sind über Dinge, von denen Sie nie gewusst haben, dass sie dort sind.
Deane
Ich lerne so viele coole neue Tricks aus den Antworten in diesem Thread - danke! :)
Maxim Zaslavsky
16
Anstelle von "Versteckte Funktionen von ..." sollten diese Dinge nicht als "Wenig bekannte Funktionen von ..." bezeichnet werden, da fast jede Antwort in MSDN oder anderswo gut dokumentiert ist, nur nicht allgemein bekannt oder verwendet.
Während des Tests können Sie E-Mails an einen Ordner auf Ihrem Computer anstatt an einen SMTP-Server senden lassen. Fügen Sie dies in Ihre web.config ein:
"Ja wirklich?" Ich wollte gerade einen gefälschten SMTP-Server wie Dumbster installieren. Ich habe Juwel versteckt.
Eduardo Molteni
2
Weiß jemand, ob Sie eine UNC-Freigabe für den Verzeichnisspeicherort angeben können?
Mark Sherretta
32
Besser noch, legen Sie dies auf Ihrer Entwicklungsbox machine.config ab, damit Sie die web.config nicht bei jeder von Ihnen erstellten App ändern müssen.
Max Toro
Können Sie es so einstellen, dass dies nur auf dem lokalen Host ausgeführt wird? Auf diese Weise müssen Sie es nicht jedes Mal ändern?
Chobo2
Dafür gibt es keine Einstellung. Sie müssen die Konfigurationsunterschiede mit anderen Methoden verwalten (Web Deployment-Projekte, Build-Aufgaben usw.)
John Sheehan
210
Wenn Sie eine Datei mit dem Namen app_offline.htm
im Stammverzeichnis eines Webanwendungsverzeichnisses ablegen, fährt ASP.NET 2.0+ die Anwendung herunter und beendet die normale Verarbeitung neuer eingehender Anforderungen für diese Anwendung, wobei nur der Inhalt von app_offline.htm angezeigt wird Datei für alle neuen Anfragen .
Dies ist die schnellste und einfachste Möglichkeit, die Meldung "Site vorübergehend nicht verfügbar" anzuzeigen, während Änderungen auf einem Produktionsserver erneut bereitgestellt (oder zurückgesetzt) werden.
Autsch! Seien Sie vorsichtig, wenn Sie dies mit MOSS 2007 verwenden. Es funktioniert nur für Seiten, auf die seit dem letzten IIS-Neustart zugegriffen wurde. Wenn Sie diese Seite also zu Ihrem virtuellen wss-Stammverzeichnis hinzufügen und dann versuchen, eine Seite zu öffnen, auf die zuvor noch nicht zugegriffen wurde, erhalten Sie eine 404.
Marc
1
@Marc - Ich habe diesen Tipp von Scott Guthrie erhalten. Wenn Sie sich großzügig fühlen, würden Sie vielen SharePoint-Entwicklern helfen, dieses Szenario zu vermeiden, wenn Sie den Artikel des Gu kommentieren: weblogs.asp.net/scottgu/archive/2005/10/ 06 / 426755.aspx
Troy DeMonbreun
Außerdem wird dadurch ein Recycling der App-Domäne ausgelöst und alle offenen Datenbankverbindungen werden geschlossen, nachdem alle Anforderungen abgeschlossen wurden.
Bart Verkoeijen
Dies hat eine Einschränkung: IIS gibt den Inhalt von app_offline.htm mit einem HTTP-Statuscode von 404 zurück. Sollte eine Suchmaschine in diesem Offline-Modus versuchen, Ihre Site zu indizieren, werden Sie die Ergebnisse möglicherweise nicht schätzen. Aber es funktioniert hervorragend für meine private Unternehmens-Web-App!
Einige Entwickler könnten argumentieren, dass es besser ist, Dinge manuell in HttpContext.Response zu packen, als eine Ausnahme auszulösen, die in .NET-Büchern ziemlich teuer ist.
Lubos Hasko
Ist das nicht eine schlechte Form? Sie zeigen den 404-Fehler an, während Sie einen Fehler / eine Ausnahme anzeigen möchten.
Donnie Thomas
1
Ein Fall, an den ich denken kann, ist, wenn jemand böswillig mit Parametern herumspielt und etwas Ungültiges einfügt, möchten Sie wahrscheinlich einen generischen 404, keinen bestimmten Fehler.
John Sheehan
3
Nur weil ich jetzt die .NET Tip of the Day-Site kenne.
Kon
es funktioniert nur, wenn Sie es in httpModule oder httpHandler
Khaled Musaied
75
Hier ist der beste. Fügen Sie dies Ihrer web.config hinzu, um VIEL schneller zu kompilieren. Dies ist Post 3.5SP1 über dieses QFE .
<compilationoptimizeCompilations="true">
Kurzzusammenfassung: Wir führen in ASP.NET einen neuen OptimizeCompilations-Switch ein, der in einigen Szenarien die Kompilierungsgeschwindigkeit erheblich verbessern kann. Es gibt einige Fänge, lesen Sie also weiter für weitere Details. Dieser Switch ist derzeit als QFE für 3.5SP1 verfügbar und wird Teil von VS 2010 sein.
Das ASP.NET-Kompilierungssystem verfolgt einen sehr konservativen Ansatz, der dazu führt, dass frühere Arbeiten gelöscht werden, die bei jeder Änderung einer Datei der obersten Ebene ausgeführt wurden. 'Top Level'-Dateien enthalten alles in bin und App_Code sowie global.asax. Während dies für kleine Apps gut funktioniert, wird es für sehr große Apps nahezu unbrauchbar. Beispielsweise stieß ein Kunde auf einen Fall, in dem das Aktualisieren einer Seite 10 Minuten dauerte, nachdem Änderungen an einer "Bin" -Baugruppe vorgenommen wurden.
Um die Schmerzen zu lindern, haben wir einen "optimierten" Kompilierungsmodus hinzugefügt, der einen viel weniger konservativen Ansatz für die Neukompilierung verfolgt.
Ist dies bei VS 2010 "standardmäßig aktiviert" oder sollte ich es trotzdem ausprobieren?
M4N
73
Mit HttpContext.Current erhalten Sie immer Zugriff auf die Anforderung / Antwort / etc. Des aktuellen Kontexts, auch wenn Sie keinen Zugriff auf die Eigenschaften der Seite haben (z. B. von einer lose gekoppelten Hilfsklasse).
Sie können die Ausführung von Code auf derselben Seite fortsetzen, nachdem Sie den Benutzer auf eine andere Seite umgeleitet haben, indem Sie Response.Redirect ( url , false ) aufrufen.
Sie benötigen keine ASPX- Dateien, wenn Sie nur eine kompilierte Seite (oder einen IHttpHandler ) benötigen . Stellen Sie einfach den Pfad und die HTTP-Methoden so ein, dass sie auf die Klasse im <httpHandlers>Element in der Datei web.config verweisen.
Ein Page- Objekt kann programmgesteuert aus einer ASPX- Datei abgerufen werden, indem PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context) aufgerufen wird.
Über Response.Redirect (url, false) - Das ist so viel, was ich mir lange erhofft habe. Ich weiß nicht, wie ich das verpasst habe, aber thanxxx
Subliminal Hash
1
Kann jemand erklären, was Sie damit machen würden? Ich weiß, dass es einen gewissen Wert hat, aber ich kann nicht herausfinden, warum ...
Deane
5
Wenn Sie den Benutzer an eine andere Adresse umleiten möchten, aber noch eine Back-End-Verarbeitung durchführen müssen (z. B. eine Berichterstellungsanforderung, die zur Generierungsstatusseite des Berichts umleitet, während der Bericht weiterhin im Hintergrund generiert wird)
Markieren Sie Cidade
Kann jemand eine nützliche Situation für PageParser.GetCompiledPageInstance (..) erklären? In den Dokumenten wird angegeben, dass es für die Verwendung in der Infrastruktur bestimmt ist. Es gibt einen IHttpHandler-Typ zurück, sodass ich nicht sehe, wie es praktisch verwendet werden kann.
John K
@jdk: Ich habe es in der Vergangenheit verwendet, als ich den Standardhandler für * .aspx-Anforderungen überschrieben habe, damit ich dynamische speicherinterne IHttpHandler-Objekte verwenden kann, aber auch GetCompiledPageInstance () für physische * .aspx-Dateien verwenden kann.
Überschreibt die Einstellungen von web.config, um das Debuggen auf false zu erzwingen, aktiviert benutzerdefinierte Fehler und deaktiviert die Ablaufverfolgung. Vergessen Sie nicht mehr, Attribute vor dem Veröffentlichen zu ändern. Lassen Sie sie einfach alle für Entwicklungs- oder Testumgebungen konfiguriert und aktualisieren Sie die Einstellungen für den Produktionseinzelhandel.
Manchmal vergesse ich, das Kompilierungs-Debug vor dem Veröffentlichen in false zu ändern, was sich negativ auf die Leistung auswirkt. Kein Problem mehr!
Roy Tinker
59
Aktivieren von Intellisense für MasterPages auf den Inhaltsseiten
Ich bin sicher, dass dies ein sehr wenig bekannter Hack ist
In den meisten Fällen müssen Sie die findcontrol-Methode verwenden und die Steuerelemente auf der Masterseite von den Inhaltsseiten umwandeln, wenn Sie sie verwenden möchten. Die MasterType- Direktive aktiviert Intellisense in Visual Studio, sobald Sie dies tun
Fügen Sie der Seite einfach eine weitere Anweisung hinzu
Persönlich denke ich, dass die Funktion den Leuten unbekannt bleiben sollte, sie koppelt die Seite mit der Masterseite. Wenn Sie am Ende die Eigenschaften / Methoden der Masterseite verwenden und dann die Masterseite ändern, kommt es zu einem Wartungsalptraum.
Phill
@Phil: Manchmal wird es benötigt und ein statisch typisierter Zugriff auf eine Masterseite ist viel besser als der FindControl-Ansatz. Zumindest erhalten Sie die Compilermeldung und können diese schnell beheben.
Durden81
58
HttpContext.Items als Caching-Tool auf Anforderungsebene
Dies sollte auch mein Punkt sein, ich verwende dies in verschachtelten Controllern, um Informationen auf Anforderungsebene zu übergeben / zu empfangen. Ich verwende dies auch in MVC, um eine Liste der anzuhängenden JS-Dateien zu speichern, basierend auf Teilansichten.
Tracker1
1
Ich verwende dies, wenn ich das asp.net-Routing verwende, um die von den URLs abgerufenen Parameter an meine Seiten zu übergeben. (nicht mit MVC) ideal zum Umschreiben von URLs und sehr flexibel.
Alexandre Brisebois
Hmmmm, ich dachte nur an einen Ort, an dem ich dies anstelle von Session - ta hätte verwenden können!
Mike Kingscott
52
Zwei Dinge fallen mir auf:
1) Sie können Trace über den Code ein- und ausschalten:
Sie können Steuerelemente in der ASPX haben, die nicht in Klasse 1 angezeigt werden, und umgekehrt. Sie müssen sich jedoch daran erinnern, Ihre Steuerelemente auf Nullen zu überprüfen.
Ich hätte darüber abgestimmt, aber mir gingen die Stimmen aus. Ich werde versuchen, mich daran zu erinnern, zurück zu kommen, um darüber abzustimmen. Ich wusste nicht, dass wir dieselbe Code Behind-Datei für mehrere Seiten haben können. Ich bin mir nicht sicher, wie das funktionieren würde.
Vaibhav
5
Ist jemand der Meinung, dass es ein Sicherheitsrisiko ist, einen Trace von einer URL aus zu aktivieren? (# 1) Ich werde diese Frage nicht ablehnen, aber es ist wichtig, das Risiko dort zu verstehen.
Kevin Goff
5
Absolut, Sie sollten diesen Code wirklich in einen # ifdef DEBUG # endif-Block
einfügen
Tolle Kommentare, die auf den Sicherheitsaspekt hinweisen.
Vaibhav
2
Warum ist es ein Sicherheitsrisiko, einen Trace von der URL zu aktivieren? Wie kann es verwendet werden, um mir zu schaden?
Kamarey
48
Sie können verwenden:
Request.Params[Control.UniqueId]
Um den Wert eines Steuerelements zu erhalten, BEVOR der Ansichtsstatus initialisiert wird (Control.Text usw. ist zu diesem Zeitpunkt leer).
Die Viewstate-Initialisierung wird nicht mit Request.Params behandelt. Verwenden Sie es, BEVOR Sie die Methode LoadPostData des Steuerelements IPostBackDataHandler auslösen.
Chapluck
46
WebMethods.
Sie können ASP.NET AJAX-Rückrufe für Webmethoden verwenden, die auf ASPX-Seiten platziert sind. Sie können eine statische Methode mit den Attributen [WebMethod ()] und [ScriptMethod ()] dekorieren. Beispielsweise:
Mit der Tag-Zuordnung können Sie kompatible Steuerelemente zur Kompilierungszeit auf jeder Seite Ihrer Webanwendung austauschen. Ein nützliches Beispiel ist, wenn Sie über ein Standard-ASP.NET-Steuerelement verfügen, z. B. eine DropDownList, und dieses durch ein benutzerdefiniertes Steuerelement ersetzen möchten, das von DropDownList abgeleitet ist. Dies könnte ein Steuerelement sein, das angepasst wurde, um ein optimierteres Caching von Suchdaten zu ermöglichen. Anstatt jedes Webformular zu bearbeiten und die integrierten DropDownLists durch Ihre benutzerdefinierte Version zu ersetzen, können Sie ASP.NET tatsächlich für Sie ausführen lassen, indem Sie web.config ändern:
Dies wäre sehr verwirrend für andere Entwickler in Ihrem Team
Aykut Akıncı
1
@ Aykut - In der Tat könnte es sein, weshalb ich feststelle, dass seine Nützlichkeit eher eng ist, aber bei Bedarf ist es sehr praktisch. Außerdem würde ich sicherstellen, dass jede Verwendung von Tag Mapping sehr klar dokumentiert ist, um Verwirrung und Unklarheiten zu vermeiden.
CraigTP
43
HttpModules . Die Architektur ist verrückt elegant. Vielleicht keine versteckte Funktion, aber trotzdem cool.
HttpModules ist etwas, das fortgeschritten ist, aber ich würde es nicht selten oder weniger gebraucht nennen (oder mich naiv nennen). Aber ja, ich liebe die Architektur.
Vaibhav
+1, da viele erfahrene Entwickler vielleicht etwas über HttpModules wissen, aber ihre Beziehung zu Anfragen nicht vollständig verstehen. (Gleiches gilt für HttpHandlers)
John Bubriski
34
Sie können ASP.NET-Kommentare auf einer ASPX-Seite verwenden, um vollständige Teile einer Seite einschließlich Serversteuerelementen zu kommentieren. Und der auskommentierte Inhalt wird niemals an den Kunden gesendet.
Das Schöne am Code Expression Builder ist, dass Sie datenbindungsähnliche Ausdrücke in Situationen ohne Datenbindung verwenden können. Sie können auch andere Ausdrucksgeneratoren erstellen, die andere Funktionen ausführen.
Nun, ich glaube, ich bin nie zu den anderen gekommen.
andleer
2
+1, wirklich cooles Feature ... Das ist eigentlich ziemlich ähnlich zu den Markup-Erweiterungen von WPF
Thomas Levesque
Ist das nicht dasselbe wie mit <%= /*code*/ %>?
Bevacqua
33
Verwendung des ASHX-Dateityps:
Wenn Sie nur einige grundlegende HTML- oder XML- Dateien ausgeben möchten, ohne die Seitenereignishandler zu durchlaufen, können Sie das HttpModule auf einfache Weise implementieren
Nennen Sie die Seite SomeHandlerPage.ashx und geben Sie einfach den folgenden Code (nur eine Zeile) ein
Es ist erwähnenswert, dass Sie IRequiresSessionState oder IReadOnlySessionState hinzufügen sollten, wenn Sie es benötigen, da es sonst nicht vorhanden ist.
Tracker1
3
Es ist auch erwähnenswert, dass Sie das Setup des Handlers in der web.config angeben können, damit keine physische Ashx-Datei herumliegen muss. Oder Sie können den Handler programmgesteuert in Ihrem Anwendungsstart im globalen Asax registrieren.
+1. Können Sie ein kurzes Codebeispiel inline posten? Ich denke, es wird mehr Aufmerksamkeit und positive Stimmen erzeugen. Ich möchte, dass dieser steigt.
Ich habe an einer asp.net-Anwendung gearbeitet, die eine Sicherheitsüberprüfung durch ein führendes Sicherheitsunternehmen durchlaufen hat, und diesen einfachen Trick gelernt, um eine weniger bekannte, aber wichtige Sicherheitslücke zu verhindern.
Erwägen Sie die Verwendung von Page.ViewStateUserKey, um Ein-Klick-Angriffen entgegenzuwirken. Wenn Sie Ihre Anrufer authentifizieren und ViewState verwenden, legen Sie die Page.ViewStateUserKey-Eigenschaft im Page_Init-Ereignishandler fest, um Angriffe mit einem Klick zu verhindern.
Setzen Sie die Eigenschaft auf einen Wert, von dem Sie wissen, dass er für jeden Benutzer eindeutig ist, z. B. eine Sitzungs-ID, einen Benutzernamen oder eine Benutzer-ID.
Ein Ein-Klick-Angriff tritt auf, wenn ein Angreifer eine Webseite (.htm oder .aspx) erstellt, die ein verstecktes Formularfeld mit dem Namen __VIEWSTATE enthält, das bereits mit ViewState-Daten gefüllt ist. Der ViewState kann aus einer Seite generiert werden, die der Angreifer zuvor erstellt hat, z. B. einer Warenkorbseite mit 100 Artikeln. Der Angreifer lockt einen ahnungslosen Benutzer zum Surfen auf die Seite, und dann veranlasst der Angreifer, dass die Seite an den Server gesendet wird, auf dem der ViewState gültig ist. Der Server kann nicht erkennen, dass der ViewState vom Angreifer stammt. ViewState-Validierung und HMACs wirken diesem Angriff nicht entgegen, da ViewState gültig ist und die Seite im Sicherheitskontext des Benutzers ausgeführt wird.
Durch Festlegen der ViewStateUserKey-Eigenschaft wird die Eigenschaft beim Navigieren des Angreifers zu einer Seite zum Erstellen des ViewState auf seinen Namen initialisiert. Wenn der legitime Benutzer die Seite an den Server sendet, wird sie mit dem Namen des Angreifers initialisiert. Infolgedessen schlägt die ViewState HMAC-Prüfung fehl und es wird eine Ausnahme generiert.
Denken Sie auch daran, base.OnInit (e) zu verlassen. damit die Funktion Page_Init () ihre Arbeit erledigt.
Druide
Ich denke, dass dieser Trick fehlschlagen kann, wenn ein echter Benutzer keine Cookies akzeptiert hat oder wenn die Sitzungs-ID eine Zeitüberschreitung hat.
Aristos
1
Sie brauchen nicht, base.OnInit(e);wenn Sie AutoEventWireup="true"für die Seite verwenden.
Adam Nofsinger
1
Druide: Er überschreibt OnInit nicht (in diesem Fall wäre base.OnInit (e) notwendig).
Crdx
Die Verwendung der Sitzungs-ID für den ViewStateUserKey funktioniert nur, nachdem eine Sitzung tatsächlich gestartet wurde. Dies bedeutet auch, dass diese Seiten nach Ablauf der Sitzung eine Zeitüberschreitung aufweisen können. In Fällen, in denen diese Probleme ein Problem darstellen, können Sie eine dauerhaftere Methode in Betracht ziehen, z. B. die IP-Adresse des Benutzers.
Dies ist ideal, um zu bestimmen, welche Skripte ausgegeben werden sollen (Min- oder Vollversion) oder was Sie sonst noch in dev wollen, aber nicht live.
Verwenden von configSource zum Teilen von Konfigurationsdateien.
Sie können das configSource-Attribut in einer web.config-Datei verwenden, um Konfigurationselemente in andere .config-Dateien zu übertragen, z.
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
... können Sie den gesamten Abschnitt appSettings in einer anderen Konfigurationsdatei speichern. Hier ist das Neue web.config:
<appSettingsconfigSource="myAppSettings.config"/>
Die myAppSettings.configDatei:
<appSettings><addkey="webServiceURL"value="https://some/ws.url"/><!-- some more keys --></appSettings>
Dies ist sehr nützlich für Szenarien, in denen Sie eine Anwendung für einen Kunden bereitstellen und nicht möchten, dass dieser die Datei web.config selbst stört und nur einige Einstellungen ändern kann.
Dies funktioniert auch bei allen Arten von .net-Projekten, z. B. bei Desktop-Apps. configs
Zoltan Veres
17
MaintainScrollPositionOnPostback- Attribut in der Page-Direktive. Es wird verwendet, um die Bildlaufposition der Aspx-Seite über Postbacks hinweg beizubehalten.
Standardmäßig wird jeder Inhalt zwischen Tags für ein benutzerdefiniertes Steuerelement als untergeordnetes Steuerelement hinzugefügt. Dies kann in einer AddParsedSubObject () - Überschreibung zum Filtern oder zusätzlichen Parsen (z. B. von Textinhalten in LiteralControls) abgefangen werden:
Wenn ASP.NET einen RSS-Feed generiert, wird manchmal eine zusätzliche Zeile oben auf der Seite eingefügt. Dies wird mit gängigen RSS-Validatoren nicht überprüft. Sie können dies umgehen, indem Sie die Seitenanweisung <@Page>am Ende der Seite einfügen.
Würden Sie nicht besser einen .ASHX-Handler zum Generieren von RSS-Feeds verwenden?
Dan Diplo
Ich denke, das hängt von der Komplexität des Projekts ab. Nicht jeder hat die Fähigkeit oder die Fähigkeiten, Handler zu erstellen und zu kompilieren. Auf Seite asp.net funktioniert einigermaßen gut dafür
Kevin Goff
1
Und Sie können so etwas wie <asp: Repeater> verwenden, um RSS-Elemente zu generieren und andere Tricks auszuführen (z. B. die Verwendung von LogInView, um einige Elemente zu entfernen), was viel besser ist als das Schreiben von Zeichenfolgen aus ASHX IMO
chakrit
LinqToXml + ASHX ist der richtige Weg!
Carlos Muñoz
Dies ist viel mehr als nur für die Generierung von RSS-Feeds nützlich. IIRC, HTML5 muss das <! Doctype html> -Tag in der ersten Zeile oben haben, um korrekt zu validieren.
Roy Tinker
12
Bevor ASP.NET v3.5 Routen hinzufügte, konnten Sie Ihre eigenen benutzerfreundlichen URLs erstellen, indem Sie einfach ein HTTP-Modul in die Anforderung schreiben und diese früh in der Seitenpipeline neu schreiben (wie das BeginRequest-Ereignis).
DotNetNuke hat ein wirklich gutes HttpModule, das dies für ihre freundlichen URLs tut. Ist immer noch nützlich für Computer, auf denen Sie .NET v3.5 nicht bereitstellen können.
Antworten:
Während des Tests können Sie E-Mails an einen Ordner auf Ihrem Computer anstatt an einen SMTP-Server senden lassen. Fügen Sie dies in Ihre web.config ein:
quelle
Wenn Sie eine Datei mit dem Namen app_offline.htm im Stammverzeichnis eines Webanwendungsverzeichnisses ablegen, fährt ASP.NET 2.0+ die Anwendung herunter und beendet die normale Verarbeitung neuer eingehender Anforderungen für diese Anwendung, wobei nur der Inhalt von app_offline.htm angezeigt wird Datei für alle neuen Anfragen .
Dies ist die schnellste und einfachste Möglichkeit, die Meldung "Site vorübergehend nicht verfügbar" anzuzeigen, während Änderungen auf einem Produktionsserver erneut bereitgestellt (oder zurückgesetzt) werden.
Stellen Sie außerdem, wie von marxidad hervorgehoben , sicher, dass die Datei mindestens 512 Byte Inhalt enthält, damit IE6 sie korrekt wiedergibt .
quelle
Dies wird von ASP.NET abgefangen, das die Seite customErrors zurückgibt. Erfahren Sie mehr darüber in einem kürzlich veröffentlichten .NET-Tipp des Tages
quelle
Hier ist der beste. Fügen Sie dies Ihrer web.config hinzu, um VIEL schneller zu kompilieren. Dies ist Post 3.5SP1 über dieses QFE .
Über hier :
quelle
Mit HttpContext.Current erhalten Sie immer Zugriff auf die Anforderung / Antwort / etc. Des aktuellen Kontexts, auch wenn Sie keinen Zugriff auf die Eigenschaften der Seite haben (z. B. von einer lose gekoppelten Hilfsklasse).
Sie können die Ausführung von Code auf derselben Seite fortsetzen, nachdem Sie den Benutzer auf eine andere Seite umgeleitet haben, indem Sie Response.Redirect ( url , false ) aufrufen.
Sie benötigen keine ASPX- Dateien, wenn Sie nur eine kompilierte Seite (oder einen IHttpHandler ) benötigen . Stellen Sie einfach den Pfad und die HTTP-Methoden so ein, dass sie auf die Klasse im
<httpHandlers>
Element in der Datei web.config verweisen.Ein Page- Objekt kann programmgesteuert aus einer ASPX- Datei abgerufen werden, indem PageParser.GetCompiledPageInstance (virtualPath, aspxFileName, Context) aufgerufen wird.
quelle
Einzelhandelsmodus auf der Ebene machine.config:
Überschreibt die Einstellungen von web.config, um das Debuggen auf false zu erzwingen, aktiviert benutzerdefinierte Fehler und deaktiviert die Ablaufverfolgung. Vergessen Sie nicht mehr, Attribute vor dem Veröffentlichen zu ändern. Lassen Sie sie einfach alle für Entwicklungs- oder Testumgebungen konfiguriert und aktualisieren Sie die Einstellungen für den Produktionseinzelhandel.
quelle
Aktivieren von Intellisense für MasterPages auf den Inhaltsseiten
Ich bin sicher, dass dies ein sehr wenig bekannter Hack ist
In den meisten Fällen müssen Sie die findcontrol-Methode verwenden und die Steuerelemente auf der Masterseite von den Inhaltsseiten umwandeln, wenn Sie sie verwenden möchten. Die MasterType- Direktive aktiviert Intellisense in Visual Studio, sobald Sie dies tun
Fügen Sie der Seite einfach eine weitere Anweisung hinzu
Wenn Sie den virtuellen Pfad nicht verwenden möchten und stattdessen den Klassennamen verwenden möchten
Den vollständigen Artikel finden Sie hier
quelle
HttpContext.Items als Caching-Tool auf Anforderungsebene
quelle
Zwei Dinge fallen mir auf:
1) Sie können Trace über den Code ein- und ausschalten:
2) Sie können mehrere ASPX-Seiten mit nur einer gemeinsam genutzten "CodeBehind" -Datei erstellen.
Erstellen Sie eine CS-Datei der Klasse:
und dann können Sie eine beliebige Anzahl von .aspx-Seiten haben (nachdem Sie .designer.cs und .cs Code-Behind gelöscht haben, die VS generiert hat):
Sie können Steuerelemente in der ASPX haben, die nicht in Klasse 1 angezeigt werden, und umgekehrt. Sie müssen sich jedoch daran erinnern, Ihre Steuerelemente auf Nullen zu überprüfen.
quelle
Sie können verwenden:
Um den Wert eines Steuerelements zu erhalten, BEVOR der Ansichtsstatus initialisiert wird (Control.Text usw. ist zu diesem Zeitpunkt leer).
Dies ist nützlich für Code in Init.
quelle
WebMethods.
Sie können ASP.NET AJAX-Rückrufe für Webmethoden verwenden, die auf ASPX-Seiten platziert sind. Sie können eine statische Methode mit den Attributen [WebMethod ()] und [ScriptMethod ()] dekorieren. Beispielsweise:
Jetzt können Sie auf Ihrer ASPX-Seite Folgendes tun:
Rufen Sie Ihre serverseitige Methode über JavaScript auf, indem Sie Folgendes verwenden:
quelle
Überprüfen Sie, ob der Client noch verbunden ist, bevor Sie eine lang laufende Aufgabe starten:
quelle
Eine wenig bekannte und selten verwendete Funktion von ASP.NET ist:
Tag-Zuordnung
Es wird selten verwendet, weil es nur eine bestimmte Situation gibt, in der Sie es brauchen würden, aber wenn Sie es brauchen, ist es so praktisch.
Einige Artikel über diese wenig bekannte Funktion:
Tag-Zuordnung in ASP.NET
Verwenden der Tag-Zuordnung in ASP.NET 2.0
und aus diesem letzten Artikel:
quelle
HttpModules . Die Architektur ist verrückt elegant. Vielleicht keine versteckte Funktion, aber trotzdem cool.
quelle
Sie können ASP.NET-Kommentare auf einer ASPX-Seite verwenden, um vollständige Teile einer Seite einschließlich Serversteuerelementen zu kommentieren. Und der auskommentierte Inhalt wird niemals an den Kunden gesendet.
quelle
Der Code Expression Builder
Beispiel-Markup:
Das Schöne am Code Expression Builder ist, dass Sie datenbindungsähnliche Ausdrücke in Situationen ohne Datenbindung verwenden können. Sie können auch andere Ausdrucksgeneratoren erstellen, die andere Funktionen ausführen.
web.config:
Die cs-Klasse, die alles möglich macht:
quelle
<%= /*code*/ %>
?Verwendung des ASHX-Dateityps:
Wenn Sie nur einige grundlegende HTML- oder XML- Dateien ausgeben möchten, ohne die Seitenereignishandler zu durchlaufen, können Sie das HttpModule auf einfache Weise implementieren
Nennen Sie die Seite SomeHandlerPage.ashx und geben Sie einfach den folgenden Code (nur eine Zeile) ein
Dann die Codedatei
quelle
Festlegen der Serversteuerungseigenschaften basierend auf dem Zielbrowser und mehr .
Das hat mich irgendwie überrascht.
quelle
System.Web.VirtualPathUtility
quelle
Ich habe an einer asp.net-Anwendung gearbeitet, die eine Sicherheitsüberprüfung durch ein führendes Sicherheitsunternehmen durchlaufen hat, und diesen einfachen Trick gelernt, um eine weniger bekannte, aber wichtige Sicherheitslücke zu verhindern.
Die folgende Erklärung stammt von: http://www.guidanceshare.com/wiki/ASP.NET_2.0_Security_Guidelines_-_Parameter_Manipulation#Consider_Using_Page.ViewStateUserKey_to_Counter_One-Click_Attacks
Erwägen Sie die Verwendung von Page.ViewStateUserKey, um Ein-Klick-Angriffen entgegenzuwirken. Wenn Sie Ihre Anrufer authentifizieren und ViewState verwenden, legen Sie die Page.ViewStateUserKey-Eigenschaft im Page_Init-Ereignishandler fest, um Angriffe mit einem Klick zu verhindern.
Setzen Sie die Eigenschaft auf einen Wert, von dem Sie wissen, dass er für jeden Benutzer eindeutig ist, z. B. eine Sitzungs-ID, einen Benutzernamen oder eine Benutzer-ID.
Ein Ein-Klick-Angriff tritt auf, wenn ein Angreifer eine Webseite (.htm oder .aspx) erstellt, die ein verstecktes Formularfeld mit dem Namen __VIEWSTATE enthält, das bereits mit ViewState-Daten gefüllt ist. Der ViewState kann aus einer Seite generiert werden, die der Angreifer zuvor erstellt hat, z. B. einer Warenkorbseite mit 100 Artikeln. Der Angreifer lockt einen ahnungslosen Benutzer zum Surfen auf die Seite, und dann veranlasst der Angreifer, dass die Seite an den Server gesendet wird, auf dem der ViewState gültig ist. Der Server kann nicht erkennen, dass der ViewState vom Angreifer stammt. ViewState-Validierung und HMACs wirken diesem Angriff nicht entgegen, da ViewState gültig ist und die Seite im Sicherheitskontext des Benutzers ausgeführt wird.
Durch Festlegen der ViewStateUserKey-Eigenschaft wird die Eigenschaft beim Navigieren des Angreifers zu einer Seite zum Erstellen des ViewState auf seinen Namen initialisiert. Wenn der legitime Benutzer die Seite an den Server sendet, wird sie mit dem Namen des Angreifers initialisiert. Infolgedessen schlägt die ViewState HMAC-Prüfung fehl und es wird eine Ausnahme generiert.
quelle
base.OnInit(e);
wenn SieAutoEventWireup="true"
für die Seite verwenden.HttpContext.Current.IsDebuggingEnabled
Dies ist ideal, um zu bestimmen, welche Skripte ausgegeben werden sollen (Min- oder Vollversion) oder was Sie sonst noch in dev wollen, aber nicht live.
quelle
In ASP.NET 3.5 SP1 enthalten:
quelle
DefaultButton- Eigenschaft in Panels.
Hiermit wird die Standardschaltfläche für ein bestimmtes Bedienfeld festgelegt.
quelle
ScottGu hat eine Reihe von Tricks unter http://weblogs.asp.net/scottgu/archive/2006/04/03/441787.aspx
quelle
Verwenden von configSource zum Teilen von Konfigurationsdateien.
Sie können das configSource-Attribut in einer web.config-Datei verwenden, um Konfigurationselemente in andere .config-Dateien zu übertragen, z.
... können Sie den gesamten Abschnitt appSettings in einer anderen Konfigurationsdatei speichern. Hier ist das Neue
web.config
:Die
myAppSettings.config
Datei:Dies ist sehr nützlich für Szenarien, in denen Sie eine Anwendung für einen Kunden bereitstellen und nicht möchten, dass dieser die Datei web.config selbst stört und nur einige Einstellungen ändern kann.
ref: http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx
quelle
MaintainScrollPositionOnPostback- Attribut in der Page-Direktive. Es wird verwendet, um die Bildlaufposition der Aspx-Seite über Postbacks hinweg beizubehalten.
quelle
HttpContext.IsCustomErrorEnabled ist eine coole Funktion. Ich habe sie mehr als einmal nützlich gefunden. Hier ist ein kurzer Beitrag darüber.
quelle
Standardmäßig wird jeder Inhalt zwischen Tags für ein benutzerdefiniertes Steuerelement als untergeordnetes Steuerelement hinzugefügt. Dies kann in einer AddParsedSubObject () - Überschreibung zum Filtern oder zusätzlichen Parsen (z. B. von Textinhalten in LiteralControls) abgefangen werden:
...
quelle
Wenn ASP.NET einen RSS-Feed generiert, wird manchmal eine zusätzliche Zeile oben auf der Seite eingefügt. Dies wird mit gängigen RSS-Validatoren nicht überprüft. Sie können dies umgehen, indem Sie die Seitenanweisung
<@Page>
am Ende der Seite einfügen.quelle
Bevor ASP.NET v3.5 Routen hinzufügte, konnten Sie Ihre eigenen benutzerfreundlichen URLs erstellen, indem Sie einfach ein HTTP-Modul in die Anforderung schreiben und diese früh in der Seitenpipeline neu schreiben (wie das BeginRequest-Ereignis).
URLs wie http: // Servername / Seite / Param1 / SomeParams1 / Param2 / SomeParams2 werden einer anderen Seite wie unten zugeordnet (häufig mit regulären Ausdrücken).
DotNetNuke hat ein wirklich gutes HttpModule, das dies für ihre freundlichen URLs tut. Ist immer noch nützlich für Computer, auf denen Sie .NET v3.5 nicht bereitstellen können.
quelle