通过HttpClient发送和接收json

时间:2016-01-04 03:05:09

标签: c# json asp.net-mvc dotnet-httpclient

我正在设计2个网站,并希望从第一个网站发送一个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控制器的操作Contacts

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

你能告诉我如何获得json吗?

p / s:抱歉give me the code问题,我一直在寻找谷歌搜索,但在我的案例中没有找到样本。我想在服务器端执行此操作,而不是在客户端使用ajax。

1 个答案:

答案 0 :(得分: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;
   }
}

框架应该能够通过绑定重建对象。