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上接收复杂对象。
答案 0 :(得分:1)
您在请求中使用了错误的内容类型。在MakeRequest_Post
方法中,更改内容类型标题,如下所示:
client.Headers[HttpRequestHeader.ContentType] = "application/json";
我相信您还需要从POST主体中删除前导=
,如下所示:
var result = client.UploadString(sURL, "POST", formData);