简化JQuery web api调用

时间:2013-11-29 05:33:18

标签: jquery ajax asp.net-web-api

我正在尝试构建一个非常简单的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)以查看它如何将表单参数映射到复杂对象。

1 个答案:

答案 0 :(得分:0)

从数据中删除双引号。即像 - {'searchText':'xxxx'}

相关问题