2016-01-04 104 views
1

我設計2個網站,並想從第一個網站發送一個JSON到第二:在第二個網站Contacts控制器發送,並通過HttpClient的接收JSON

// Action from the first website 
public async Task<ActionResult> Index() 
{ 
    using (var client = new HttpClient()) 
    { 
     var package = new Dictionary<string, string>() 
     { 
     { "Name", "Julie" } 
     { "Address", "UK" } 
     }; 

     string json = JsonConvert.SerializeObject(package); 

     var response = await client.PostAsync("thesecondsite.com/contacts/info", ???); 
    } 
} 

行動Info

[HttpPost] 
public ActionResult Info() 
{ 
    // How can I catch the json here? 
    // string json = ... 
} 

你能告訴我如何獲得json嗎?

p/s:對不起,give me the code問題,我一直在尋找谷歌搜索,但沒有發現樣品在我的情況。我想在服務器端做這個,而不是在客戶端使用ajax。

+0

這個問題解決了嗎? – Nkosi

回答

1

你需要告訴客戶你想發送什麼。在這種情況下,它是一個JSON字符串有效載荷

var content = new StringContent(json, Encoding.UTF8, "application/json"); 

var response = await client.PostAsync("thesecondsite.com/contacts/info", content); 

至於第二個網站,你有一些方法來接受它。但這裏是一個快速和骯髒的方式,如果你只是在發送JSON作爲您在形式上第一個站點

[HttpPost] 
public ActionResult Info(IDictionary<string,string> payload) { 
    if(payload!=null) { 
     var Name = payload["Name"]; 
     var Addredd = payload["Address"]; 
    } 
} 

這是你如何能做到這一個快速的樣本顯示。您應該檢查以確保您正在查找的密鑰實際上在有效負載中。

你也可以這樣來做

class Contact { 
    public string Name{get;set;} 
    public string Address {get;set;} 
} 
... 

[HttpPost] 
public ActionResult Info(Contact payload) { 
    if(contact!=null){ 
     var Name = contact.Name; 
     var Address = contact.Address; 
    } 
} 

框架應該能夠通過結合到重建對象。

+0

一個小問題:爲什麼你發送一個字符串並通過'IDictionary '接收字符串?將'string'隱式轉換爲'IDictionary '? –

+0

您將'Dictionary '包轉換爲json'string'將其發送到其他站點。字符串就是你如何發送它。當它到達目的地時,框架工作足夠聰明,知道如何將其轉換爲其他類型。 'Dictionary '從IDictionary '繼承。你可以很容易地使用'Dictionary ' – Nkosi

+0

json字符串只是你想發送的對象/數據的表示。 – Nkosi