如何在web api中发送和接收复杂对象

本文关键字:复杂 对象 web api | 更新日期: 2023-09-27 18:24:36

IDE:Visual Studio 2012

我有如下控制器:

public class MyController: ApiController
{
  public IHttpActionResult AddMyControllerInfo([FromBody]Dictionary<string, string> dictCustomer)  
  {
     //Some logic...
      return Ok("Success");  
  }
}  

它是从客户项目调用的:

调用代码如下:

internal static void SendInfoToMyController(Dictionary<string, string> dictCustomer)
    {
        string jsDict = Utilities.SerializeToJson<Dictionary<string, string>>(dictCustomer);
        string js = Utilities.MakeRequest_Post("/api/AddMyControllerInfo", jsDict);
    }  

这里是Make request函数:

internal static string MakeRequest_Post(string sURL, string formData)
    {
        try
        {
            sURL = ConfigurationManager.AppSettings["ServerApiPath"] + sURL;

            using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
                var result = client.UploadString(sURL, "POST", "=" + formData);
            }
        }
        catch (Exception ex)
        {
        }
        return "";
    }  

当我接收到字符串(json格式)数据类型形式的[FromBody]参数数据,并将其反序列化为字典形式时,上面的代码运行良好。

但在上面的场景中,我接收到字典对象为null。

对于上面的场景,你能告诉我如何在webapi中接收复杂的对象吗。

如何在web api中发送和接收复杂对象

您在请求中使用了错误的内容类型。在MakeRequest_Post方法中,更改内容类型标头如下:

client.Headers[HttpRequestHeader.ContentType] = "application/json";

我认为您还需要从POST主体中删除前导=,如下所示:

var result = client.UploadString(sURL, "POST", formData);