2016-03-21 2 views
1

я в состоянии сделать следующий веб-запрос с помощью вызова JQuery AJAX:Сделать вызов REST службы из 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; 
     } 
}); 

При попытке сделать такой же вызов из C# я не могу успешно связаться с удаленным сервером поскольку я получаю ошибки, заявляя, что удаленный сервер не может быть найден. Вот код, который я пытаюсь получить работу в C#:

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; 

Любые указатели о том, как сделать тот же веб-службы в C# или что я делаю неправильно здесь?

+0

Может быть, это должно помочь: http://stackoverflow.com/questions/9620278/how-do-i-make-calls-to-a-rest-api -using-c – TheUknown

+0

О, и всегда старайтесь не помещать свой логин и токены и т. д. в вопрос – TheUknown

+0

Эти недопустимые учетные данные и токены. – ghoston3rd

ответ

0

Я получил эту работу с помощью RestSharp. Вот код, который работал на меня:

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

В C# кода вы делаете запрос GET, используйте HttpClient класс, чтобы сделать запрос POST вместо

+0

Ознакомьтесь с изменениями, внесенными мной в исходное сообщение, чтобы использовать HttpClient. Теперь я получаю не найденный ответ. Посмотрите что-нибудь еще, что отключено? – ghoston3rd

+0

Поскольку вы вызываете PostAsync, вы должны добавить ожидание вашей команды, как этот ответ var = wait client.PostAsync («https://api.publicstuff.com:443/app/auth/sign_in», content) .Result; –

0

Большая разница между вашими двумя способами является то, что бывший делает запрос HTTP от вашей машины, в то время как Код C# делает его с сервера, на котором запущено ваше приложение.

Вполне возможно, что ваша машина может разрешить api.publicstuff.com, но что машина, работающая под кодом C#, не может (за брандмауэром или вообще не имеет общего доступа).

+0

Как я могу решить проблему? – ghoston3rd

+0

@ ghoston3rd Войдите в систему, используя свой код C#, и попробуйте перейти в браузере на api.publicstuff.com. Если вы получаете тайм-аут или отказ DNS, тогда проблема диагностируется. – Jamiec

+0

Код C# работает на том же компьютере, что и я запускаю вызов Javascript Ajax. – ghoston3rd

Смежные вопросы