通过HttpClient发送和接收json

本文关键字:json HttpClient 通过 | 更新日期: 2023-09-27 18:29:01

我正在设计两个网站,想从第一个网站向第二个网站发送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", ???);
   }
}

第二网站Contacts控制器的动作Info

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

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

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

通过HttpClient发送和接收json

您需要告诉客户端您想要发送什么。在这种情况下,它是一个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;
   }
}

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