我有一个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...It工作。
但是,当我简单地添加一个整数属性并传递它时,我会得到一个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我知道我可以在路线上通过:
[Route("LevelFiltered/{id}")]我用原始的物体做过。然而,我真正的签名需要如下:
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething(FilterViewTypes filterType, string parentID, FilterSelections filters)其中filterType是一个枚举,过滤器是一个带有数组的复杂对象。
我试过互联网上的每一篇文章,但都没有成功。我必须接近,否则无参数版本将无法工作。如果我的所有属性都是原始对象,我只需将它们连接到URL上即可。
那么,如何从客户端将多个复杂对象传递给Web 2控制器。这是一个MVC 5网站。
发布于 2016-11-01 18:19:05
好吧,打电话给朋友就知道了。
显然,您只能通过WebAPI传递1(一个、Uno、Hana、单个)复杂对象。因此,我将我想要的3个参数封装到一个对象(模型)中,并传递了那么长的时间。注意,您不必在ajax调用中传递WebAPI签名属性名称。这意味着我的属性名为input,但它不在下面的ajax调用中。
因此,您可以从头开始跟踪,下面是更新的WebAPI控制器:
[RoutePrefix("api/Hierarchy")]
public class HierarchyController : ApiController {
[HttpPost]
[Route("LevelFiltered")]
public async Task<GCAResponse<List<SelectableFilterItem>>> GetUsersFilteredHierarchyItems(LevelFilterParameters input) {
...
}
}除了将3个参数合并到我称为LevelFilterParameters并放在我的Model文件夹中的1之外,没有什么改变。这是一堂课:
public class LevelFilterParameters {
public FilterViewTypes FilterType { get; set; }
public string ParentID { get; set; }
public FilterSelections Filters { get; set; }
}下面是更新的javascript调用:
$.ajax({
url: $scope.URLs.Test,
contentType: "application/json",
cache: false,
type: "POST",
dataType: "json",
data: JSON.stringify({ FilterType: 1, ParentID: null, Filters: UsersFilters })
}).done(function (data, textStatus, jqXHR) {
alert("here");
}).fail(function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}).always(function () {
}); // ajax就像冠军一样。谢谢你凯尔。
https://stackoverflow.com/questions/40361886
复制相似问题