ASP.NET Tips & Tricks Uwe Baumann Technologieberater Developer Group Microsoft GmbH uwebaum@microsoft.com http://www.uwebaumann.de
Was Sie erwartet Nützliche Tips für den ASP.NET-Alltag Logon und Authentifizierung File Upload und Download Datenübergabe zwischen Webseiten Zentrale Fehlerbehandlung Webseiten-Dokumentvorlagen (Templates) Automatische URL-Umleitung (Redirection) Einige komplett nutzlose, aber irgendwie interessante Informationen.
Nutzloses Wissen – Teil 1 Die Durchschnittsgeschwindigkeit eines Schmetterlings beträgt 32 km/h.
Logon und Authentifizierung Problem Nur authentifizierte User(-gruppen) sollen auf bestimmte Seiten zugreifen dürfen Aufgaben Logon-Seite erstellen Authentifizierung der User gegen beliebige Datenbank bzw. andere Quellen Betreffende Seiten absichern
Logon und Authentifizierung Tips & Tricks Rollenbasierte Zugriffskontrolle nicht "aus der Box" möglich Möglich durch Erstellung und Zuweisen eines eigenen GenericPrincipal im Authenticate-Event GenericIdentity-Objekt Speichert User-Identität (Name) GenericPrincipal-Objekt Speichert Identität und Rollen
demo Forms Authentifizierung Democode: FormsAuth.sln
Nutzloses Wissen – Teil 2 Ungarn exportiert mehr Nilpferde als jedes andere europäische Land.
File Upload und Download Problem User sollen Dateien auf dem Webserver in einer Datenbank ablegen können Aufgaben Upload-Seite erstellen Daten aus Upload in SQL Server leiten Download-Seite erstellen Daten aus SQL Server zurück an Browser schicken
File Upload und Download Tips & Tricks FORM enctype="multipart/form-data" einfügen INPUT type="file" runat="server" einfügen PostedFile-Objekt Eigenschaft des Input-Controls Eigenschaften des hochgeladenen Files (Größe, MIME-Type, Name) Abspeichern über SaveAs-Methode oder "manuell" über InputStream
demo Upload / Download - Directory - SQL Server Democode: UploadDownload.sln
Nutzloses Wissen – Teil 3 Der kürzeste burmesische Familienname ist "H".
Datenübergabe zwischen Webseiten Problem Ein Eingabeformular soll über mehrere Seiten gehen (Wizard) und Daten aus der vorigen Seite übernehmen Aufgaben Daten in der aktuellen Instanz der Seitenklasse speichern Daten in der Folgeseite über das Context-Objekt auslesen
Datenübergabe zwischen Webseiten Tips & Tricks Server.Transfer hält die Anfrage auf dem selben Server Zugriff auf die Instanzvariablen der vorigen Seite ist in Form_Load möglich Context-Objekt Handler-Eigenschaft enthält Referenz auf die Instanz der letzten Seitenklasse Cast auf die Seitenklasse nötig
Das ASP.NET Prinzip INETINFO.EXE POST /site/form1.aspx ..... HTTP Request ASPNET_ISAPI.DLL HTTP 1.1 200 OK ..... HTTP Response form1.aspx ASPNET_WP.EXE form1_aspx.dll <%@ WebService language="c#" class= using System.Web.Services; [WebService(Description="Provides a v public class Simple { [WebMethod(Description=„ Returns a nice greeting")] public string Hello() { return "Hello"; } Page Class Assembly Kompilieren Instanzieren
demo Context Object verwenden
Nutzloses Wissen – Teil 4 Harvey Kennedy erfand die Schnürsenkel und wurde dadurch reich.
Zentrale Fehlerbehandlung Problem Fehler, die irgendwo in der Web-Applikation auftreten, sollen zentral registriert bzw. behandelt werden Ein Eintrag in das Applikationslog soll erstellt werden Aufgaben Fehlerbehandlungscode in Global_asax schreiben, Informationen extrahieren System.Diagnostics-Klassen verwenden, um einen Logeintrag zu erstellen
Zentrale Fehlerbehandlung Tips & Tricks Die abgefangene Exception ist immer "HTTPUnhandledException", die "wirkliche" Exception steht in InnerException EventLog-Objekt Alle Funktionen zum Umgang mit Eventlogs
Application_Error() Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) ' Fires when an error occurs Dim MyError As System.Exception Dim ErrorMessage As String Dim ErrorSource As String MyError = Context.Error.InnerException ErrorMessage = MyError.Message ErrorSource = MyError.Source End Sub
Application_Error() Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) ' Fires when an error occurs Dim MyError As System.Exception Dim ErrorMessage As String Dim ErrorSource As String 'Eigentlicher Fehler ist in InnerException gespeichert 'Äußere Exception ist immer HttpUnhandledException MyError = Context.Error.InnerException ErrorMessage = MyError.Message ErrorSource = MyError.Source End Sub
Logfile-Eintrag erstellen If Not EventLog.SourceExists("TechTalkWeb") Then EventLog.CreateEventSource("TechTalkWeb", "Application") End If Dim MyEventLog As New EventLog() MyEventLog.Source = "TechTalkWeb" MyEventLog.WriteEntry(ErrorMessage & _ ControlChars.CrLf & ErrorSource, _ EventLogEntryType.Error) 'Möglich: Keinen lokalen Fehler auslösen (schlechte Idee) Context.ClearError() 'Stattdessen auf beliebige Seite umleiten (z.B. Alternativserver) Response.Redirect("http://msdn.microsoft.com")
demo ASP.NET Logfiles Democode: CentralExceptions.sln
Nutzloses Wissen – Teil 5 Der Mensch blinzelt normalerweise 25000 Mal pro Tag.
Seitenvorlagen (Templates) Problem Eine Seitenvorlage soll HTML enthalten, das auf jeder Seite vorkommt Lösung Seitenvorlage (Template) erstellen Render-Methode überschreiben Content-Seiten von Master-Seite ableiten
Seitenvorlagen (Templates) Tips & Tricks Render-Methode überschreiben ist einfach zu realisieren und sehr performant, aber etwas schlecht zu warten (kein WYSWYG) Alternative: Header und Footer als Controls erstellen, in OnPreRender-Event einfügen (WYSWYG über Visual Studio)
demo ASP.NET Templates Democode: SimpleTemplates.sln
Nutzloses Wissen – Teil 6 Gold ist das 16. seltenste Element auf der Welt.
Automatische URL-Umleitung Problem Seitenaufrufe sollen auf eine andere URL umgeleitet werden, ohne daß der User dies bemerkt (z.B. bei "Umzug" der Site) Vorbild: mod_rewrite von Apache Lösung BeginRequest-Event abfangen RewritePath-Funktion verwenden, um URL "umzuschreiben"
Automatische URL-Umleitung Tips & Tricks Ursprüngliche URL kann für "Weiterverwendung" im Context-Objekt gespeichert werden (Items-Aufzählung)
demo URL-Umleitung Democode: ReDirect.sln
Vielen Dank! Fragen kostet nichts…
Weitere Informationen Nutzloses Wissen Hanswilhelm Haefs: Handbuch des nutzlosen Wissens, dtv Verlag Forms Authentication http://portals.devx.com/SummitDays/Article/6666/0/page/1 URL Rewriting http://www.codeproject.com/aspnet/URLRewriter.asp ASP.NET Templates http://www.wilsondotnet.com Download der Beispiele http://www.uwebaumann.de ASP.NET allgemein http://www.asp.net