从 C# 调用 REST 服务

Make call to REST service from c#

我可以通过 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# 中制作相同的网络服务或我在这里做错了什么的任何指示?

在 C# 代码中发出 GET 请求,请改用 HttpClient class 发出 POST 请求

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

很有可能您的机器可以解析 api.publicstuff.com,但机器 运行 的 c# 代码不能(在防火墙后面,或者根本没有 public 访问权限)。

我使用 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);