【问题标题】:Simplifying JQuery web api calls简化 JQuery web api 调用
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-11-12
      • 2019-06-11
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2017-07-15
      • 2019-07-06
      相关资源
      最近更新 更多