2013-02-20 66 views
3

我想使用API​​調用發佈對象。我在代碼隱藏中使用以下代碼獲取數據Api後面的代碼

HttpClient client = new HttpClient(); 

client.BaseAddress = new Uri(ConfigurationManager.AppSettings["JUri"]); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 


HttpResponseMessage response = client.GetAsync("api/receipt/" + jID).Result; 
if (response.IsSuccessStatusCode) 
{} 

我想知道這裏有任何與POST等價的代碼。

+0

你爲什麼不定義金額和MailID模式? – 2013-02-21 05:04:10

+0

參數太多,並且模型參數不起作用。所以我把它作爲單獨的字符串傳遞。 – NewBie 2013-02-21 05:05:35

回答

3

POST使用形式:使用JSON

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["JUri"]); 

var postData = new List<KeyValuePair<string, string>>(); 

postData.Add(new KeyValuePair<string, string>("Key1", "Value1")); 
postData.Add(new KeyValuePair<string, string>("Key2 ", "Value2")); 

HttpContent content = new FormUrlEncodedContent(postData); 
var response = client.PostAsync("api/receipt/" + jID, content) 
if (response.IsSuccessStatusCode) 
{} 

POST,假設你有DTO類:

var client = new HttpClient(); 
var dto = new Dto {Pro1 = "abc"}; 

var reponse = client.PostAsJsonAsync("api/receipt/" + jID, dto).Result; 

if (reponse.IsSuccessStatusCode) 
{} 
+0

對於使用JSON的POST,我是否需要將postData設置爲鍵值對? – NewBie 2013-02-20 09:43:25

+0

@NewBie:不,只是將你的對象傳入方法 – 2013-02-20 10:17:02

+0

我試過你的代碼,它加深了調用我的POST方法,但我的參數沒有被分配到post方法的參數。 – NewBie 2013-02-21 04:34:42

1

最適合你的方法是使用一個第三方庫,像RestSharp 簡單的方法來發布一些通過RestSharp您的API看起來就像是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.IO; 
using System.Threading; 
using RestSharp; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication2 
{ 
    public class SimpleConnector 
    { 
     private CookieContainer _cookieJar = new CookieContainer(); 
     private RestClient client = new RestClient(); 
     public string TwitterAuthenticate(string user, string pass) 
     { 
      client.CookieContainer = _cookieJar; 
      //RestClient client = new RestClient("https://twitter.com"); 
      IRestRequest request = new RestRequest("https://twitter.com/", Method.GET); 
      client.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"; 
      client.AddDefaultHeader("Accept", "*/*"); 
      //request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method 
      //request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource 

      // easily add HTTP Headers 
      //request.AddHeader("header", "value"); 

      // add files to upload (works with compatible verbs) 

      // execute the request 
      IRestResponse response = client.Execute(request); 
      var content = response.Content; 
      Match m = Regex.Match(content, @"name=""authenticity_token""\s*value=""(.*?)"">"); 
      string authenticity_token = m.Groups[1].Value; 
      request = new RestRequest("https://twitter.com/sessions", Method.POST); 
      request.AddParameter("session[username_or_email]", user); 
      request.AddParameter("session[password]", pass); 
      request.AddParameter("return_to_ssl", "true"); 
      request.AddParameter("scribe_log", ""); 
      request.AddParameter("redirect_after_login", "/"); 
      request.AddParameter("authenticity_token", authenticity_token); 
      response = client.Execute(request); 
      content = response.Content; 
      return content; 
     } 
+0

沒有任何我可以直接使用..沒有第三方庫?一些平淡的東西? – NewBie 2013-02-20 07:50:57

+0

你可以像HttpWebRequest.Method一樣使用HttpWebRequest,比你必須寫你發佈的內容流並計算它的長度,然後 - 發送到服務器 – 2013-02-20 07:56:21

1

是的,你可以這樣做方法:

HttpClient client = new HttpClient(); 

client.BaseAddress = new Uri(ConfigurationManager.AppSettings["JUri"]); 

您既可以使用以下方法之一下面給出按您的要求:

Task<HttpResponseMessage> response = client.PostAsJsonAsync(); 

OR

Task<HttpResponseMessage> response = client.PostAsXmlAsync(); 

OR

Task<HttpResponseMessage> response = client.PostAsync(); 

希望這有助於!

+0

我可以在哪裏傳遞發佈數據?我有和對象,如何發送它作爲發佈數據? – NewBie 2013-02-20 07:54:54