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

时间:2015-11-27 06:59:16

标签: c# json asp.net-mvc http asp.net-web-api

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。

对于上述情况,您能告诉我如何在web api上接收复杂对象。

1 个答案:

答案 0 :(得分:1)

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

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

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

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