2013-02-20 2 views
3

Я хочу опубликовать объект, используя вызов API. Я получаю данные, используя следующий код в моем кодеApi POST от кода позади

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? –

+0

Слишком много параметров и что модель-параметр не работает. поэтому я передал его как отдельные строки. – NewBie

ответ

3

POST с использованием формы:

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 с помощью JSON, предположим, что у вас есть DTO класс:

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

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

if (reponse.IsSuccessStatusCode) 
{} 
+0

Для POST, использующего JSON, нужно ли устанавливать пары postData как ключевые значения? – NewBie

+0

@NewBie: Нет, просто передайте ваш объект методу –

+0

Я пробовал ваш код, и мне очень хотелось позвонить по моему методу POST, но мои параметры не получают назначения параметров метода post. – NewBie

1

Лучший способ для вас, чтобы использовать сторонние библиотеки, как RestSharp простой способ отправить кое-что к вашему апи через RestSharp будет выглядеть:

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

+0

Вы можете использовать HttpWebRequest с HttpWebRequest.Method как POST, чем вам нужно написать свой размещенный контент в поток и подсчитать его длину, а затем отправить его на сервер –

1

Да, вы можете сделать это путь:

HttpClient client = new HttpClient(); 

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

Вы можете либо использовать один из этих методов, как указано ниже в соответствии с вашими требованиями:

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

ИЛИ

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

ИЛИ

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

Надеется, что это помогает!

+0

, где я могу передать данные сообщения здесь? у меня есть объект и как его можно отправить в качестве данных для публикации? – NewBie

Смежные вопросы