我可以通过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服务或者我在这里做错了什么的指示?
答案 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);