IONOS HTTP Proxy in ASP.NET verwenden
Bitte verwenden sie die "Drucken" Funktion am Seitenende, um ein PDF zu erstellen.
Für ASP.NET Hosting (Windows Webhosting)
In diesem Artikel wird beschrieben, wie Sie den HTTP-Proxy von IONOS für Ihre ASP.NET-Projekte verwenden.
Warum den IONOS HTTP-Proxy verwenden?
Wenn im ASP.NET Hosting ein Programm oder Skript Daten aus einer Internet-Ressource (z.B. Webseite oder Datei) lesen soll, muss die Verbindung über den HTTP-Proxy-Server von IONOS erfolgen. Erfolgt die Verbindung nicht über den Proxy, wird sie aus Sicherheitsgründen abgewiesen.
Wenn Ihre Anwendung also Daten über externe HTTP-Verbindungen liest, müssen Sie sie so konfigurieren, dass sie den Proxy verwendet.
HTTP-Proxy konfigurieren: Wählen Sie Ihre .NET-Version
Je nachdem, ob Sie eine moderne .NET-Anwendung (z. B. .NET 6, 7 oder 8) oder eine ältere Anwendung auf Basis des .NET Frameworks verwenden, unterscheidet sich die Methode zur Konfiguration des Proxys.
Methode 1: Für .NET (z.B. .NET 6 und neuer) via Programmcode (Empfohlen)
Bei modernen .NET-Anwendungen wird der Proxy nicht mehr über die web.config konfiguriert, sondern muss direkt im Programmcode gesetzt werden. Empfohlen wird, den Proxy global beim Start der Anwendung für alle HttpClient-Anfragen zu definieren.
Fügen Sie dazu folgenden Code in Ihre Start-Logik ein (z. B. in die Datei Program.cs oder die Klasse Startup.cs):
// Beispiel für Program.cs in .NET 6+
// ... (vor dem builder.Build())
// Prüfen, ob die Anwendung auf dem IONOS Server läuft (nicht lokal)
string host = Environment.MachineName; // oder eine andere Methode zur Host-Erkennung
if (host.Contains("localhost") == false)
{
// IONOS-Proxyserver und Standardport global setzen
System.Net.HttpClient.DefaultProxy = new System.Net.WebProxy("http://winproxy.server.lan", 3128);
}
var app = builder.Build();
// …
Methode 2: Für .NET Framework via web.config
Falls Ihre Anwendung auf dem klassischen .NET Framework basiert (z.B. ältere ASP.NET-WebForms- oder MVC-Projekte), können Sie den Proxy global über die web.config-Datei aktivieren.
Hinweis
Diese Einstellung hat keine Auswirkung auf moderne .NET-Anwendungen (ehemals .NET Core).
Tragen Sie winproxy.server.lan als defaultProxy im Bereich <system.net> ... </system.net> ein:
<configuration>
...
<system.net>
<defaultProxy>
<proxy proxyaddress="http://winproxy.server.lan:3128"
bypassonlocal="true"
/>
</defaultProxy>
</system.net>
...
</configuration>
Methode 3: Proxy manuell pro Anfrage (Alle Versionen)
Unabhängig von den globalen Einstellungen (Methode 1 oder 2) können Sie den Proxy auch temporär nur für einzelne Anfragen aktivieren. Dies ist nützlich, wenn nur bestimmte Code-Teile den Proxy benötigen.
Die folgenden Codebeispiele für VB.NET und C# zeigen dies mittels der WebRequest-Klasse (aus dem system.net-Namespace):
Code-Beispiel für VB.NET
<% @Import Namespace="System.Net" %>
<% @Import Namespace="System.IO" %>
<script language="VB" runat=server>
Sub Page_Load(sender as object, e as System.EventArgs)
Try
Dim wrq As WebRequest = WebRequest.Create("http://domain.tld") //replace domain.tld as wanted
wrq.Proxy = new WebProxy("http:/winproxy.server.lan:3128")
Dim wrp As WebResponse = wrq.GetResponse()
Dim sr as StreamReader = new StreamReader(wrp.GetResponseStream(), Encoding.ASCII)
While sr.Peek() > 0
Response.Write(sr.ReadLine())
End While
Catch ex as WebException
Response.Write(ex.Message)
End Try
End Sub
</script>
Code-Beispiel für C#
<% @Import Namespace="System.Net" %>
<% @Import Namespace="System.IO" %>
<script language="C#" runat=server>
void Page_Load(object sender, System.EventArgs e)
{
try
{
WebRequest wrq = WebRequest.Create("http://domain.tld"); // replace domain.tld as wanted
wrq.Proxy = new WebProxy("http://winproxy.server.lan:3128");
WebResponse wrp = wrq.GetResponse();
StreamReader sr = new StreamReader(wrp.GetResponseStream(), Encoding.ASCII);
while (sr.Peek() > 0)
{
Response.Write(sr.ReadLine());
}
}
catch(WebException ex)
{
Response.Write(ex.Message);
}
}
</script>
HTTP-Proxy-Funktion testen
Hinweis
Das folgende Beispiel verwendet eine .aspx-Seite (ASP.NET WebForms) und demonstriert die manuelle Zuweisung des Proxys gemäß Methode 3.
Im Folgenden zeigen wir am Beispiel der Google reCAPTCHA API, wie Sie die Funktionalität des HTTP-Proxys testen können.
Dazu verwenden wir eine einfache ASP.NET-Seite, die mittels C# einen (unvollständigen) HTTP-Request an die Google reCAPTCHA API sendet. Dieser Request entspricht normalerweise der Anfrage, mit der die Antwort eines Nutzers auf eine reCAPTCHA-Herausforderung überprüft wird. Die Antwort des Google-Servers wird anschließend auf der Website angezeigt.
Bitte beachten Sie, dass es sich hierbei nicht um eine vollständige Implementierung von Google reCAPTCHA handelt. Es wird lediglich der für eine reCAPTCHA-Herausforderung erforderliche Request simuliert – ein tatsächliches reCAPTCHA-Element ist dabei nicht eingebunden.
Zur Überprüfung der Funktionalität des HTTP-Proxys:
- Erstellen Sie auf Ihrem Webspace zwei Dateien mit den Namen default.aspx und default.aspx.cs und kopieren Sie den unten stehenden Code hinein.
- Rufen Sie die Seite default.aspx über Ihre Domain im Browser auf.
- Klicken Sie auf Start.
Es wird nun ein Request gesendet und die Antwort unmittelbar vor dem Eingabefeld der Seite angezeigt. - Prüfen Sie, ob links vom Eingabfeld ein Text angezeigt wird. Die Ausgabe sollte in etwa so aussehen:
{ "success": false, "error-codes": [ "missing-input-response", "missing-input-secret" ] }
Es ist nur wichtig, dass dort etwas ist und kein Systemfehler vorliegt. Wenn Sie letzteres nicht korrigieren können, prüfen Sie, ob der Proxy alternativ über web.config aktiviert werden kann.
Kopiervorlage: default.aspx
<%@ Page Language="C#" AutoEventWireup="true" Codefile="default.aspx.cs" Inherits="WebApplication1._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="URL:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" Width="269px" Text="https://www.google.com/recaptcha/api/siteverify"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Start" OnClick="Button1_Click" />
</div>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</form>
</body>
</html>
Kopiervorlage: default.aspx.cs
using System;
using System.Net;
using System.IO;
namespace WebApplication1
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
WebrequesProxy();
}
protected void WebrequesProxy()
{
WebRequest wrGETURL;
wrGETURL = WebRequest.Create(TextBox1.Text);
WebProxy myProxy = new WebProxy("http://winproxy.server.lan:3128/",true);
wrGETURL.Proxy = myProxy;
Stream objStream;
objStream = wrGETURL.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
Label1.Text = objReader.ReadToEnd();
}
}
}