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();
}
}
}