【发布时间】:2013-11-29 14:54:43
【问题描述】:
我正在尝试构建一个非常简单的 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"
);
还是不行。有什么遗漏/错误?
编辑----------
根据http://forums.asp.net/t/1922381.aspx,因此 $.post() 使用 contentType: "application/json; charset=utf-8" 并且 MVC API 控制器无法将表单参数映射到正在使用的复杂对象上,http://forums.asp.net/t/1922381.aspx
我观看了 Scott Allen 的 MVC 5 视频,他似乎将 $.post() 用于内置帐户控制器(例如:注册)。我无权访问帐户控制器(VS2013)来查看它如何将表单参数映射到复杂对象。
【问题讨论】:
标签: jquery ajax asp.net-web-api