2012-04-05 4 views
1

Ich versuche, eine https GET zu JustOneDB zu tun, funktioniert es, wenn ich es aus dem Dienstprogramm curl mache. Aber es funktioniert NICHT von C#. Ich bekomme (400) Schlechte AnfrageAppharbor JustOneDB https Anfrage von C# bekommen 400 Fehler

Ich suchte und deaktivierte Sicherheit und all das, aber es funktioniert immer noch nicht. Irgendwelche Ideen? Hat jemand das mit Ruhe und JustOneDB gemacht?

Dies funktioniert entlang w/alle anderen Rest Beispiele:

curl -k -XGET 'https://username:[email protected]:31415/justonedb/database/database name'

Diese funktionieren nicht: dummied ich die Zeichenfolge mein Passwort zu entfernen.

public ActionResult JustOneDb() 
    { 
     /////////// 
     HttpWebRequest request = null; 
     HttpWebResponse response = null; 
     try 
     { 

      String Xml; 
      //curl -k -XGET 'https://[email protected]:31415/justonedb/database/n10lvkpdhdxei0l2uja' 
      string url = @"https://[email protected]:31415/justonedb/database/n10lvkpdhdxei0l2uja"; 

      request = (HttpWebRequest)WebRequest.Create(url); 

      request.Method = "GET"; 

      request.Credentials = CredentialCache.DefaultCredentials; 

      // Ignore Certificate validation failures (aka untrusted certificate + certificate chains) 
      ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); 


      // Get response 
      using (response = (HttpWebResponse)request.GetResponse()) 
      { 
       // Get the response stream 
       StreamReader reader = new StreamReader(response.GetResponseStream()); 
       Xml = reader.ReadToEnd(); 
      } 
      return Content(Xml); 
     } 
     catch (Exception ee) 
     { 
      return Content(ee.ToString()); 

     } 
     ////////////// 

     ViewBag.fn = "*.xml"; 
     return View(); 
    } 

Ergebnisse:

System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() 
at Mvc3Razor.Controllers.MyXmlController.JustOneDb() ... 

TIA FxM: {

Antwort

1

Statt den Benutzernamen Passwort in der URL vorbei, sollten Sie die richtigen Anmeldeinformationen mit "username" und "password" erstellen. Sie könnten auch in Betracht ziehen, etwas wie RestSharp anstelle der rohen WebRequest zu verwenden.

+0

RestSharp hat auch nicht funktioniert. Ich denke, es hat etwas mit dem Zertifikat zu tun. Andere https-Sites funktionieren. Und Curl funktioniert. Wirklich wollte Rest zu JustOneDb tun, weil die gleiche App eine Perl-Ruhe hat. Danke. – FxM

+0

Richtig, ich melde mich bei den Jungs von JustOneDB. – friism

0

Es gab einen Konflikt mit dem Zertifikat, das behoben wurde. Es ist immer noch selbstsigniert, aber jetzt stimmt der Hostname überein. Wir werden bald ein vollständig signiertes Zertifikat verwenden, aber lassen Sie mich in der Zwischenzeit wissen, ob es nur mit der selbstsignierten Überschreibung funktioniert.

+0

Es funktioniert immer noch nicht. Das Punktnetz ist restriktiver als wenn man es nur mit der Locke benutzt. TA – FxM

0

Ok, ich habe den Code kopiert, und das Problem ist, dass die HttpWebRequest-Bibliothek den Authentifizierungsheader in der ursprünglichen Anfrage nicht hinzufügt. Die Lösung ist den Header manuell einzufügen, so dass, wenn Sie die folgenden zwei Zeilen nach der ‚request.method =‚GET‘Zeile hinzufügen (und die Benutzername/Passwort aus dem URL-Zeichenfolge entfernen):

string authInfo = "zn0lvkpdhdxb70l2_DUMMY_urshn5e7i41lb3fiwuh"; 
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); 

Es soll richtig funktionieren.

Verwandte Themen