【发布时间】:2016-11-02 02:19:05
【问题描述】:
我有一个如下的 WebAPI 2 控制器(此处简化):
[RoutePrefix("api/Hierarchy")]
public class HierarchyController : ApiController {
[HttpPost]
[Route("LevelFiltered")]
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething() {
...
} // GetSomething
} // HierarchyController
当我使用 jQuery ajax 调用如下调用该函数时...
$.ajax({
url: $scope.URLs.Test,
contentType: "application/json",
cache: false,
type: "POST",
dataType: "json"
}).done(function (data, textStatus, jqXHR) {
alert("here");
}).fail(function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}).always(function () {
}); // ajax
...有效。
但是,当我简单地添加一个整数属性并将其传递时,我得到一个 404 错误。
[HttpPost]
[Route("LevelFiltered")]
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething(int id) {
...
} // GetSomething
客户电话:
$.ajax({
url: $scope.URLs.Test,
contentType: "application/json",
cache: false,
type: "POST",
dataType: "json",
data: JSON.stringify({ "id": 1 })
}).done(function (data, textStatus, jqXHR) {
alert("here");
}).fail(function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}).always(function () {
}); // ajax
我知道我可以在路由中传递 ID:
[Route("LevelFiltered/{id}")]
我已经用原始对象做到了这一点。但是,我的真实签名需要如下:
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething(FilterViewTypes filterType, string parentID, FilterSelections filters)
其中 filterType 是一个枚举,而 filters 是一个带有数组的复杂对象。
我已经尝试了互联网上的每一篇文章,但没有任何成功。我必须接近,否则无参数版本将无法工作。如果我的所有属性都是原始对象,我会将它们添加到 URL 上。
那么,如何从客户端将多个复杂的对象传递给 Web API 2 控制器。这是一个 MVC 5 网站。
【问题讨论】:
标签: jquery ajax asp.net-web-api