2017-11-28 2 views
0

Ich habe den folgenden Code, der Nachrichten empfängt Webhook:Weiterleiten HTTP-Anforderung an einen anderen Server

// Read posted data 
string requestBody; 
using (var reader = new StreamReader(HttpContext.Current.Request.InputStream)) 
{ 
    requestBody = reader.ReadToEnd(); 
} 
requestBody.Log(); 

// Attempt to forward request 
context.CopyTo(Settings.Payments.Paypal.ScirraPaypalIPNEndpoint); 

requestBody enthält Daten, die protokolliert. Ich versuche dann die Anforderung an eine andere URL weiterleiten:

public static void CopyTo(this HttpContext source, string url) 
    { 
     var destination = (HttpWebRequest) WebRequest.Create(url); 

     var request = source.Request; 
     destination.Method = request.HttpMethod; 

     // Copy unrestricted headers 
     foreach (var headerKey in request.Headers.AllKeys) 
     { 
      if (WebHeaderCollection.IsRestricted(headerKey)) continue; 
      destination.Headers[headerKey] = request.Headers[headerKey]; 
     } 

     // Copy restricted headers 
     if (request.AcceptTypes != null && request.AcceptTypes.Any()) 
     { 
      destination.Accept = string.Join(",", request.AcceptTypes); 
     } 

     destination.ContentType = request.ContentType; 
     destination.Referer = request.UrlReferrer?.AbsoluteUri ?? string.Empty; 
     destination.UserAgent = request.UserAgent; 

     // Copy content (if content body is allowed) 
     if (request.HttpMethod != "GET" 
      && request.HttpMethod != "HEAD" 
      && request.ContentLength > 0) 
     { 
      using (var destinationStream = destination.GetRequestStream()) 
      { 
       request.InputStream.Position = 0; 
       request.InputStream.CopyTo(destinationStream); 
       destinationStream.Close(); 
      } 
     } 

     if (!Settings.Deployment.IsLive) 
     { 
      ServicePointManager.ServerCertificateValidationCallback = 
       (sender, certificate, chain, sslPolicyErrors) => true; 
     } 

     using (var response = destination.GetResponse() as HttpWebResponse) 
     { 
      if (response == null) throw new Exception("Failed to post to " + url); 
     } 
    } 

Der Handler, der diese weitergeleitet Anforderung empfängt den Code:

public void ProcessRequest(HttpContext context) 
{ 
    string requestBody; 
    using (var reader = new StreamReader(HttpContext.Current.Request.InputStream)) 
    { 
     requestBody = reader.ReadToEnd(); 
    } 
    requestBody.Log(); 
} 

jedoch auf dem Handler weitergeleitet, requestBody ist immer leer! Was mache ich hier falsch?

+0

'request.ContentLength ist nicht gesetzt. Dann, dumme Frage, unterstützt der Server HEAD-Anfragen? – Jimi

+0

@Jimi Inhalt Länge wird automatisch beim Schreiben auf die Anfrage festgelegt und ja Zielserver unterstützt HEAD, OPTION, GET, POST –

+0

Also, was ist der StausCode der Antwort ?. Gibt es einen Stellvertreter zwischen den beiden? Ich frage, weil es nichts besonderes im Code gibt. Natürlich haben Sie einen POST ausprobiert, der Daten, die Sie kontrollieren, weitergibt. – Jimi

Antwort

0

Beide Server sind in Cluffern, gehostet von einem zum anderen bekomme ich einen CF 1000 IP-Fehler.

Die Lösung besteht darin, Zielserver-IP-Adresse in anfordernde Server-Hosts-Datei hinzuzufügen.

Verwandte Themen