2016-03-21 3 views
1

Ich bin in der Lage die folgende Web-Anfrage über einen jQuery AJAX-Aufruf zu machen:Make Aufruf REST-Service von C#

params = { "session[email]": "[email protected]", "session[password]": "password" } 
var token; 
$.ajax({ 
    type: "POST", 
    url: "https://api.publicstuff.com:443/app/auth/sign_in", 
    dataType: 'json', 
    async: false, 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader ("Authorization", "Token token=123456"); 
    }, 
    data: params, 
    success: function (response) { 
     if (response.success) { 
      alert('Authenticated!'); 
      token = response.token; 
     } 
}); 

Beim Versuch, den gleichen Anruf von C# zu machen, kann ich nicht erfolgreich den Remote-Server kontaktieren weil ich Fehler erhalte, die besagen, dass der Remote-Server nicht gefunden werden kann. Hier ist der Code, den ich versuche in C# zum Laufen zu bringen:

var client = new HttpClient(); 
     client.DefaultRequestHeaders.Add("Authorization", "Token token=123456"); 
     var pairs = new List<KeyValuePair<string, string>> 
     { 
      new KeyValuePair<string, string>("session[email]", "[email protected]"), 
      new KeyValuePair<string, string>("session[password]", "pw") 
     }; 

     var content = new FormUrlEncodedContent(pairs); 

     var response = client.PostAsync("https://api.publicstuff.com:443/app/auth/sign_in", content).Result; 

Irgendwelche Hinweise, wie man den gleichen Web-Service in C# machen oder was ich falsch mache hier?

+0

sein kann dies dazu beitragen sollte: http://stackoverflow.com/questions/9620278/how-do-i-make-calls-to-a-rest-api -using-c – TheUknown

+0

Oh, und versuchen Sie immer nicht, Ihre Login-und Tokens etc. in der Frage – TheUknown

+0

setzen, die nicht gültig Anmeldeinformationen und Token sind. – ghoston3rd

Antwort

0

Ich habe dies mit RestSharp funktioniert. Hier ist der Code, der für mich gearbeitet:

var client = new RestClient("https://api.publicstuff.com:443/app/auth/sign_in"); 
var request = new RestRequest(Method.POST); 

request.AddParameter("session[email]", "[email protected]"); 
request.AddParameter("session[password]", "password"); 
request.AddHeader("Authorization", "Token token=123456"); 
IRestResponse response = client.Execute(request); 
1

In C# -Code Sie eine GET-Anfrage machen, verwenden Httpclient-Klasse eine POST-Anforderung zu machen, anstatt

+0

Siehe die Änderungen, die ich an den ursprünglichen Beitrag vorgenommen habe, um HttpClient zu verwenden. Ich bekomme jetzt eine nicht gefundene Antwort. Siehst du noch etwas anderes? – ghoston3rd

+0

Da Sie PostAsync aufrufen, sollten Sie warten Sie auf Ihren Befehl warten, wie diese Antwort Antwort = client.PostAsync ("https://api.publicstuff.com:443/app/auth/sign_in", Inhalt) .Result; –

0

Der große Unterschied zwischen den beiden Möglichkeiten ist, dass erstere die HTTP-Anforderung von Ihrem Computer, während das macht C# code macht es vom Server, auf dem Ihre App läuft.

Es ist durchaus möglich, dass Ihr Computer api.publicstuff.com auflösen kann, aber dass der Computer, auf dem der C# -Code läuft, nicht kann (hinter einer Firewall oder überhaupt keinen öffentlichen Zugriff).

+0

Wie würde ich bei der Fehlersuche gehen? – ghoston3rd

+0

@ ghoston3rd Melden Sie sich in der Box mit Ihrem C# -Code an und versuchen Sie, in einem Browser zu api.publicstuff.com zu navigieren. Wenn Sie eine Zeitüberschreitung oder einen DNS-Fehler erhalten, wird das Problem diagnostiziert. – Jamiec

+0

Der C# -Code wird auf demselben Computer ausgeführt, auf dem auch der JavaScript Ajax-Aufruf ausgeführt wird. – ghoston3rd