ASP.NET ASP.NET Tips & TricksTips & Tricks
Uwe BaumannUwe Baumann
TechnologieberaterTechnologieberaterDeveloper GroupDeveloper GroupMicrosoft GmbHMicrosoft GmbH
[email protected]@microsoft.comhttp://www.uwebaumann.dehttp://www.uwebaumann.de
Was Sie erwartetWas Sie erwartet
NützlicheNützliche Tips für den ASP.NET-Alltag Tips für den ASP.NET-Alltag Logon und AuthentifizierungLogon und Authentifizierung File Upload und DownloadFile Upload und Download Datenübergabe zwischen WebseitenDatenübergabe zwischen Webseiten Zentrale FehlerbehandlungZentrale Fehlerbehandlung Webseiten-Dokumentvorlagen (Templates)Webseiten-Dokumentvorlagen (Templates) Automatische URL-Umleitung (Redirection)Automatische URL-Umleitung (Redirection)
Einige komplett Einige komplett nutzlosenutzlose, aber irgendwie , aber irgendwie interessante Informationen.interessante Informationen.
Nutzloses Wissen – Nutzloses Wissen – Teil 1Teil 1Die Durchschnittsgeschwindigkeit eines Die Durchschnittsgeschwindigkeit eines
Schmetterlings beträgt 32 km/h.Schmetterlings beträgt 32 km/h.
Logon und AuthentifizierungLogon und Authentifizierung
ProblemProblem Nur authentifizierte User(-gruppen) sollen Nur authentifizierte User(-gruppen) sollen
auf bestimmte Seiten zugreifen dürfenauf bestimmte Seiten zugreifen dürfen
AufgabenAufgaben1.1. Logon-Seite erstellenLogon-Seite erstellen
2.2. Authentifizierung der User gegen beliebige Authentifizierung der User gegen beliebige Datenbank bzw. andere QuellenDatenbank bzw. andere Quellen
3.3. Betreffende Seiten absichernBetreffende Seiten absichern
Logon und AuthentifizierungLogon und Authentifizierung
Tips & TricksTips & Tricks Rollenbasierte Zugriffskontrolle nicht "aus Rollenbasierte Zugriffskontrolle nicht "aus
der Box" möglichder Box" möglich Möglich durch Erstellung und Zuweisen Möglich durch Erstellung und Zuweisen
eines eigenen eines eigenen GenericPrincipalGenericPrincipal im im Authenticate-EventAuthenticate-Event
GenericIdentity-ObjektGenericIdentity-Objekt Speichert User-Identität (Name)Speichert User-Identität (Name)
GenericPrincipal-ObjektGenericPrincipal-Objekt Speichert Identität und RollenSpeichert Identität und Rollen
Forms Forms AuthentifizierungAuthentifizierungDemocode: FormsAuth.slnDemocode: FormsAuth.sln
demodemo
Nutzloses Wissen – Nutzloses Wissen – Teil 2Teil 2Ungarn exportiert mehr Nilpferde als jedes Ungarn exportiert mehr Nilpferde als jedes
andere europäische Land.andere europäische Land.
File Upload und DownloadFile Upload und Download
ProblemProblem User sollen Dateien auf dem Webserver in User sollen Dateien auf dem Webserver in
einer Datenbank ablegen könneneiner Datenbank ablegen können
AufgabenAufgaben1.1. Upload-Seite erstellenUpload-Seite erstellen
2.2. Daten aus Upload in SQL Server leitenDaten aus Upload in SQL Server leiten
3.3. Download-Seite erstellenDownload-Seite erstellen
4.4. Daten aus SQL Server zurück an Browser Daten aus SQL Server zurück an Browser schickenschicken
File Upload und DownloadFile Upload und Download
Tips & TricksTips & Tricks FORM enctype="FORM enctype="multipart/form-data"multipart/form-data"
einfügeneinfügen INPUT type="file" runat="server"INPUT type="file" runat="server" einfügen einfügen
PostedFile-ObjektPostedFile-Objekt Eigenschaft des Input-ControlsEigenschaft des Input-Controls Eigenschaften des hochgeladenen FilesEigenschaften des hochgeladenen Files
(Größe, MIME-Type, Name)(Größe, MIME-Type, Name) Abspeichern über Abspeichern über SaveAsSaveAs-Methode oder -Methode oder
"manuell" über "manuell" über InputStreamInputStream
Upload / DownloadUpload / Download- Directory - Directory - SQL Server- SQL ServerDemocode: UploadDownload.slnDemocode: UploadDownload.sln
demodemo
Nutzloses Wissen – Nutzloses Wissen – Teil 3Teil 3Der kürzeste burmesische Der kürzeste burmesische
Familienname ist "H".Familienname ist "H".
Datenübergabe zwischen WebseitenDatenübergabe zwischen Webseiten
ProblemProblem Ein Eingabeformular soll über mehrere Ein Eingabeformular soll über mehrere
Seiten gehen (Wizard) und Daten aus der Seiten gehen (Wizard) und Daten aus der vorigen Seite übernehmenvorigen Seite übernehmen
AufgabenAufgaben1.1. Daten in der aktuellen Instanz der Daten in der aktuellen Instanz der
Seitenklasse speichernSeitenklasse speichern
2.2. Daten in der Folgeseite über das Daten in der Folgeseite über das ContextContext--Objekt auslesenObjekt auslesen
Datenübergabe zwischen WebseitenDatenübergabe zwischen Webseiten
Tips & TricksTips & Tricks Server.TransferServer.Transfer hält die Anfrage auf dem hält die Anfrage auf dem
selben Serverselben Server Zugriff auf die Instanzvariablen der vorigen Zugriff auf die Instanzvariablen der vorigen
Seite ist in Seite ist in Form_LoadForm_Load möglich möglich
Context-ObjektContext-Objekt HandlerHandler-Eigenschaft enthält Referenz auf -Eigenschaft enthält Referenz auf
die Instanz der letzten Seitenklassedie Instanz der letzten Seitenklasse Cast auf die Seitenklasse nötigCast auf die Seitenklasse nötig
Das ASP.NET PrinzipDas ASP.NET Prinzip
POST /site/form1.aspx.....
INETINFO.EXE
ASPNET_WP.EXE<%@ WebService language="c#" class=<%@ WebService language="c#" class=using System.Web.Services;using System.Web.Services;
[WebService(Description="Provides a v[WebService(Description="Provides a vpublic class Simple public class Simple { [WebMethod(Description=„{ [WebMethod(Description=„Returns a nice greeting")] Returns a nice greeting")] public string Hello()public string Hello() {{ return "Hello";return "Hello"; }}}}
Page Class
ASPNET_ISAPI.DLL
Assembly
HTTP 1.1 200 OK.....
InstanzierenKompilieren
form1.aspx form1_aspx.dll
HTTP Request
HTTP Response
Context Object Context Object verwendenverwenden
demodemo
Nutzloses Wissen – Nutzloses Wissen – Teil 4Teil 4Harvey Kennedy erfand die Schnürsenkel Harvey Kennedy erfand die Schnürsenkel
und wurde dadurch reich.und wurde dadurch reich.
Zentrale FehlerbehandlungZentrale Fehlerbehandlung
ProblemProblem Fehler, die irgendwo in der Web-Fehler, die irgendwo in der Web-
Applikation auftreten, sollen zentral Applikation auftreten, sollen zentral registriert bzw. behandelt werdenregistriert bzw. behandelt werden
Ein Eintrag in das Applikationslog soll Ein Eintrag in das Applikationslog soll erstellt werdenerstellt werden
AufgabenAufgaben1.1. Fehlerbehandlungscode in Global_asax Fehlerbehandlungscode in Global_asax
schreiben, Informationen extrahierenschreiben, Informationen extrahieren
2.2. System.Diagnostics-Klassen verwenden, System.Diagnostics-Klassen verwenden, um einen Logeintrag zu erstellenum einen Logeintrag zu erstellen
Zentrale FehlerbehandlungZentrale Fehlerbehandlung
Tips & TricksTips & Tricks Die abgefangene Exception ist immer Die abgefangene Exception ist immer
"HTTPUnhandledException", die "HTTPUnhandledException", die "wirkliche" Exception steht in "wirkliche" Exception steht in InnerExceptionInnerException
EventLog-ObjektEventLog-Objekt Alle Funktionen zum Umgang mit Alle Funktionen zum Umgang mit
EventlogsEventlogs
ASP.NET LogfilesASP.NET LogfilesDemocode: CentralExceptions.slnDemocode: CentralExceptions.sln
demodemo
Nutzloses Wissen – Nutzloses Wissen – Teil 5Teil 5Der Mensch blinzelt normalerweise 25000 Der Mensch blinzelt normalerweise 25000
Mal pro Tag.Mal pro Tag.
Seitenvorlagen (Templates)Seitenvorlagen (Templates)
ProblemProblem Eine Seitenvorlage soll HTML enthalten, Eine Seitenvorlage soll HTML enthalten,
das auf jeder Seite vorkommtdas auf jeder Seite vorkommt
LösungLösung1.1. Seitenvorlage (Template) erstellenSeitenvorlage (Template) erstellen
2.2. Render-Methode überschreibenRender-Methode überschreiben
3.3. Content-Seiten von Master-Seite ableitenContent-Seiten von Master-Seite ableiten
Seitenvorlagen (Templates)Seitenvorlagen (Templates)
Tips & TricksTips & Tricks RenderRender-Methode überschreiben ist einfach -Methode überschreiben ist einfach
zu realisieren und sehr performant, aber zu realisieren und sehr performant, aber etwas schlecht zu warten (kein WYSWYG)etwas schlecht zu warten (kein WYSWYG)
Alternative: Header und Footer als Controls Alternative: Header und Footer als Controls erstellen, in erstellen, in OnPreRenderOnPreRender-Event einfügen -Event einfügen (WYSWYG über Visual Studio)(WYSWYG über Visual Studio)
ASP.NET TemplatesASP.NET TemplatesDemocode: SimpleTemplates.slnDemocode: SimpleTemplates.sln
demodemo
Nutzloses Wissen – Nutzloses Wissen – Teil 6Teil 6Gold ist das 16. seltenste Element auf der Gold ist das 16. seltenste Element auf der
Welt.Welt.
Automatische URL-UmleitungAutomatische URL-Umleitung
ProblemProblem Seitenaufrufe sollen auf eine andere URL Seitenaufrufe sollen auf eine andere URL
umgeleitet werden, ohne daß der User dies umgeleitet werden, ohne daß der User dies bemerkt (z.B. bei "Umzug" der Site)bemerkt (z.B. bei "Umzug" der Site)
Vorbild: mod_rewrite von ApacheVorbild: mod_rewrite von Apache
LösungLösung1.1. BeginRequest-Event abfangenBeginRequest-Event abfangen
2.2. RewritePath-Funktion verwenden, um URL RewritePath-Funktion verwenden, um URL "umzuschreiben" "umzuschreiben"
Automatische URL-UmleitungAutomatische URL-Umleitung
Tips & TricksTips & Tricks Ursprüngliche URL kann für Ursprüngliche URL kann für
"Weiterverwendung" im "Weiterverwendung" im ContextContext-Objekt -Objekt gespeichert werden (gespeichert werden (ItemsItems-Aufzählung)-Aufzählung)
URL-UmleitungURL-UmleitungDemocode: ReDirect.slnDemocode: ReDirect.sln
demodemo
Vielen Dank!Vielen Dank!
Fragen kostet nichts…Fragen kostet nichts…
Weitere InformationenWeitere Informationen
Nutzloses WissenNutzloses WissenHanswilhelm Haefs: Hanswilhelm Haefs: Handbuch des nutzlosen WissensHandbuch des nutzlosen Wissens, dtv Verlag, dtv Verlag
Forms AuthenticationForms Authenticationhttp://portals.devx.com/SummitDays/Article/6http://portals.devx.com/SummitDays/Article/6666/0/page/1666/0/page/1
URL RewritingURL Rewritinghttp://http://www.codeproject.com/aspnet/URLRewriter.aswww.codeproject.com/aspnet/URLRewriter.aspp
ASP.NET TemplatesASP.NET Templateshttp://www.wilsondotnet.comhttp://www.wilsondotnet.com
Download der BeispieleDownload der Beispielehttp://www.uwebaumann.dehttp://www.uwebaumann.de
ASP.NET allgemeinASP.NET allgemeinhttp://http://www.asp.netwww.asp.net