从c#调用REST服务

时间:2016-03-21 00:01:11

标签: c# jquery ajax webrequest

我可以通过jQuery AJAX调用发出以下Web请求:

params = { "session[email]": "email@email.com", "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@email.com"),
            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#中创建相同的Web服务或者我在这里做错了什么的指示?

3 个答案:

答案 0 :(得分:1)

在C#代码中,您正在发出GET请求,请使用HttpClient类来发出POST请求

答案 1 :(得分:0)

两种方式之间的最大区别在于,前者从您的计算机发出http请求,而c#代码则从运行您应用的服务器发出。

您的计算机很可能会解析api.publicstuff.com,但运行c#代码的计算机无法解析(在防火墙后面,或根本没有公共访问)。

答案 2 :(得分: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@email.com"); 
request.AddParameter("session[password]", "password");
request.AddHeader("Authorization", "Token token=123456");
IRestResponse response = client.Execute(request);