我正在尝试构建一个非常简单的API。
这是控制器:
public class SearchOptions
{
public string SearchText { get; set; }
}
public class TestController : ApiController
{
[HttpPost]
public string Test(SearchOptions options)
{
return options.SearchText;
}
}
这有效:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/api/test",
data: "{'searchText':'xxxx'}",
dataType: "json",
success: function (result) { $("#GetData").text(result); },
error: function (err) {
alert("Error");
}
});
现在我想(a)使用简写$ .post()和(b)使用$(form).serialize()来生成数据文字。
所以我试试这个:
var data = $("#searchForm").serialize();
$.post(
"/api/test",
data,
function(result) { $("#GetData").text(result); },
"json"
);
这不起作用。如果我检查数据的值,它是"searchText=xxxx"
。所以也许这就是问题所在。我试试这个:
$.post(
"/api/test",
"{'searchText':'xxxx'}",
function(result) { $("#GetData").text(result); },
"json"
);
仍然无效。什么缺失/错误?
EDIT --------------
因此,根据http://forums.asp.net/t/1922381.aspx
,$ .post()使用contentType: "application/json; charset=utf-8"
并且MVC API控制器无法将表单参数映射到复杂对象(如果正在使用)
我观看了Scott Allen的MVC 5视频,他似乎将$ .post()用于内置帐户控制器(例如:注册)。我无权访问帐户控制器(VS2013)以查看它如何将表单参数映射到复杂对象。
答案 0 :(得分:0)
从数据中删除双引号。即像 - {'searchText':'xxxx'}