2016-01-04 108 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