Anfrage und Antwort
Wie bereits im vorherigen Thema erklärt, besitzt die Page
-Klasse die Eigenschaften Request
und
Response
, mit welchen Objekte der Klassen HttpRequest
und HttpResponse
abgerufen
werden können, um somit Informationen der Anfrage abzurufen und die Antwort zu beeinflussen. Die wichtigsten
Eigenschaften und Funktionen der zwei Klassen werden wir in diesem Thema noch genauer behandeln.
Anfrage-Informationen
Die HttpRequest
-Klasse enthält einige Eigenschaften, mit welchen Informationen zur HTTP-Anfrage abgerufen werden
können. Die wichtigsten Eigenschaften sind in der untenstehenden Tabelle aufgeführt und werden im unteren Beispiel ausgegeben
(auf PhysicalPath
wurde aus Sicherheitsgründen im Beispiel verzichtet).
Path | Der vollständige virtuelle Pfad der Website (FilePath + PathInfo). |
---|---|
FilePath | Der virtuelle Pfad der Website. |
PathInfo | Der Zusatz einer Pfadangabe (spezielle ASP.NET-Funktion). |
PhysicalPath | Der physikalische Pfad auf dem Webserver. |
Url | Die URL der aktuellen Anfrage. |
UrlReferrer | Die URL der zuvor aufgerufenen Seite. |
HttpMethod | Die HTTP-Methode der Anfrage (GET, POST, aber auch z. B. HEAD). |
RequestType | Der Typ der Anfrage (GET oder POST). |
IsAuthenticated | Gibt an, ob es sich um eine authentifizierte Anfrage handelt. |
IsLocal | Gibt an, ob die Anfrage vom lokalen Computer (gleicher PC wie der Server) ist. |
IsSecureConnection | Gibt an, ob die Verbindung verschlüsselt ist. |
UserAgent | Der User-Agent des Browsers. |
UserHostAddress | Die IP-Adresse des Computers, von dem die Anfrage kommt. |
UserHostName | Der Hostname des Computers, von dem die Anfrage kommt. |
<table> <tr> <th>Pfad:</th> <td><%= Request.Path %></td> </tr> <tr> <th>Dateipfad:</th> <td><%= Request.FilePath %></td> </tr> <tr> <th>Pfad-Info:</th> <td><%= Request.PathInfo %></td> </tr> <tr> <th>URL:</th> <td><%= Request.Url.ToString() %></td> </tr> <tr> <th>URL der vorherigen Seite:</th> <td><%= Request.UrlReferrer != null ? Request.UrlReferrer.ToString() : "-" %></td> </tr> <tr> <th>HTTP-Methode:</th> <td><%= Request.HttpMethod %></td> </tr> <tr> <th>Anfrage-Typ:</th> <td><%= Request.RequestType %></td> </tr> <tr> <th>Authentifizierung:</th> <td><%= Request.IsAuthenticated ? "ja" : "nein" %></td> </tr> <tr> <th>Lokaler Computer:</th> <td><%= Request.IsLocal ? "ja" : "nein" %></td> </tr> <tr> <th>Sichere Verbindung:</th> <td><%= Request.IsSecureConnection ? "ja" : "nein" %></td> </tr> <tr> <th>User-Agent:</th> <td><%= Request.UserAgent != null ? Request.UserAgent : "-" %></td> </tr> <tr> <th>IP-Adresse:</th> <td><%= Request.UserHostAddress %></td> </tr> <tr> <th>Hostname:</th> <td><%= Request.UserHostName %></td> </tr> </table>
Antwort-Informationen
Die HttpResponse
-Klasse enthält ebenfalls ein paar Eigenschaften zum Abrufen des aktuellen Status der Antwort.
Dabei können diese Eigenschaften jedoch nicht nur gelesen sondern auch gesetzt werden, um somit die Antwort (engl.
response) anpassen zu können. Auch hier haben wir wieder eine Tabelle zusammengestellt und ein nachfolgendes Beispiel
erstellt.
Charset | Die Zeichenkodierung der Antwort. |
---|---|
ContentType | Der MIME-Typ der Antwort. |
Status | Die vollständige Statuszeichenkette der Antwort (StatusCode + StatusDescription). |
StatusCode | Der HTTP-Statuscode der Antwort. |
StatusDescription | Der Beschreibungs-Text des HTTP-Status der Antwort. |
IsRequestBeingRedirected | Gibt an, ob eine Weiterleitung aktiv ist. |
Expires | Die Gültigkeitsdauer des Dokuments in Minuten. |
ExpiresAbsolute | Der Ablaufzeitpunkt des Dokuments. |
<table> <tr> <th>Zeichensatz:</th> <td><%= Response.Charset %></td> </tr> <tr> <th>MIME-Typ:</th> <td><%= Response.ContentType %></td> </tr> <tr> <th>Status:</th> <td><%= Response.Status %></td> </tr> <tr> <th>Status-Code:</th> <td><%= Response.StatusCode %></td> </tr> <tr> <th>Status-Beschreibung:</th> <td><%= Response.StatusDescription %></td> </tr> <tr> <th>Weiterleitung:</th> <td><%= Response.IsRequestBeingRedirected ? "ja" : "nein" %></td> </tr> <tr> <th>Ablaufzeitraum:</th> <td><%= Response.Expires.ToString() %></td> </tr> <tr> <th>Ablaufzeitpunkt:</th> <td><%= Response.ExpiresAbsolute.ToString() %></td> </tr> </table>
URL-Parameter
Um mittels ASP.NET die URL-Parameter (GET-Parameter) auszulesen, können wir die Elemente des assoziativen Arrays (Objekt der
Klasse NameValueCollection
) QueryString
der HttpRequest
-Klasse abrufen. Wurde ein
Parameter nicht gesetzt, so wird als Wert null
zurückgegeben. Das folgende Beispiel zeigt die Verwendung der
Eigenschaft QueryString
:
Wert a: <%= Request.QueryString["a"] != null ? Request.QueryString["a"] : "-" %><br /> Wert b: <%= Request.QueryString["b"] != null ? Request.QueryString["b"] : "-" %><br /> <br /> <b>Links:</b><br /> <a href="Default.aspx">A: -, B: -</a><br /> <a href="Default.aspx?a=7">A: 7, B: -</a><br /> <a href="Default.aspx?b=4">A: -, B: 4</a><br /> <a href="Default.aspx?a=8&b=3">A: 8, B: 3</a>
Weiterleitung und Header-Änderungen
Mittels der Funktionen AddHeader()
oder AppendHeader()
der HttpResponse
-Klasse ist es
möglich, HTTP-Header an die Antwort anzuhängen. Als Parameter werden zwei Zeichenketten übergeben: der Name der
Header-Eigenschaft und der Wert der Header-Eigenschaft. Ein Vollzugriff auf alle Headers des HTTP-Responses kann über die
Eigenschaft Headers
abgerufen werden. Damit ist es dann z. B. auch möglich, bestehende Header-Eigenschaften zu ändern
oder zu löschen (Funktion Remove()
). Das Hinzufügen eines Wertes ist dort ebenfalls möglich (Funktion Add()
).
Die Funktion Redirect()
erlaubt es, eine Umleitung durchzuführen. Als Parameter wird der Funktion eine
Zeichenkette mit dem Ziel (Pfadangaben oder URLs) übergeben.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="HWhBsp.Weiterleitung_Header.Default" %> <% Response.AddHeader("Content-Language", "de"); Response.Redirect("https://www.homepage-webhilfe.de/"); %>
Streams
Der Eingangs-Stream (eingehender Datenstrom) kann über die Eigenschaft InputStream
des Objekts der Klasse
HttpRequest
abgerufen werden. Für „normale“ Webanwendungen wird dieser Stream jedoch nicht benötigt. Die
HttpResponse
-Klasse enthält ebenfalls einen Datenstrom (jedoch für ausgehende Daten). Der Stream kann über die
Eigenschaft OutputStream
abgerufen werden. Des Weiteren gibt es die Funktionen Write()
und
WriteFile()
, welche es ermöglichen, Daten aus Variablen oder einer Datei auf den Ausgabe-Stream zu senden.