2017-04-06 76 views
0

我試圖完成這一易趣訪問令牌的WebRequest如何使用Restsharp用純文本正文

服務器期待

HTTP方法:POST
URLhttps://api.sandbox.ebay.com/identity/v1/oauth2/token

HTTP標頭:

內容類型 =應用/ X WWW的窗體-urlencoded

授權 =基本

請求主體(爲了便於閱讀):

grant_type=client_credentials& 
redirect_uri=<RuName-value>& 
scope=https://api.ebay.com/oauth/api_sc 

這是工作用WebRequest如圖所示

var credentials = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(clientId + ":" + clientSecret)); 

var request = WebRequest.Create("https://api.sandbox.ebay.com/identity/v1/oauth2/token") as HttpWebRequest; 

request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Headers.Add(HttpRequestHeader.Authorization, credentials); 

var formData = Encoding.UTF8.GetBytes("grant_type=client_credentials&redirect_uri=" + ruName + "&scope=https://api.ebay.com/oauth/api_scope"); 
request.ContentLength = formData.Length; 


using (var post = request.GetRequestStream()) 
{ 
    post.Write(formData, 0, formData.Length); 
} 

using (var response = request.GetResponse() as HttpWebResponse) 
{ 
    StreamReader reader = new StreamReader(response.GetResponseStream()); 
    string result = reader.ReadToEnd(); 
} 

但是下面RestSharp請求返回錯誤

無效請求

var resource = "identity/v1/oauth2/token"; 
var request = new RestRequest(resource, Method.POST); 
var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(clientId + ":" + clientSecret)); 
request.AddParameter("Authorization", $"Basic {credentials}", ParameterType.HttpHeader); 
request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); 
var body = $"grant_type=client_credentials&redirect_uri={ruName}&scope=https://api.ebay.com/oauth/api_scope"; 
request.AddParameter("text/xml", body, ParameterType.RequestBody); 
var client = new RestClient("https://api.sandbox.ebay.com"); 

return client.Execute<T>(request); 
+1

爲什麼'text/xml'? –

+0

是啊我不安靜瞭解http管道正在進行,我想它需要是application/x-www-form-urlencoded,我認爲它只是純文本 –

回答

0

下面的工作對我來說,如果你能更好地解釋什麼是對生病標記去你的答案是正確的

var resource = "identity/v1/oauth2/token"; 
var request = new RestRequest(resource, Method.POST); 
var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(clientId + ":" + clientSecret)); 
request.AddParameter("Authorization", $"Basic {credentials}", ParameterType.HttpHeader); 
request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); 
var body = $"grant_type=client_credentials&redirect_uri={ruName}&scope=https://api.ebay.com/oauth/api_scope"; 
var formData = Encoding.UTF8.GetBytes(body); 
request.AddParameter("application/x-www-form-urlencoded", formData, ParameterType.RequestBody); 
var client = new RestClient("https://api.sandbox.ebay.com"); 

return GetResult<T>(client, request); 

注行

var body = $"grant_type=client_credentials&redirect_uri={ruName}&scope=https://api.ebay.com/oauth/api_scope"; 
var formData = Encoding.UTF8.GetBytes(body); 
request.AddParameter("application/x-www-form-urlencoded", formData, ParameterType.RequestBody); 
相關問題