如何从jQuery ajax调用将复杂对象传递给ASP.NET WebApi GET?

Chr*_*isP 35 c# ajax json http-get asp.net-web-api

我在JavaScript中有以下复杂对象,其中包含过滤器选项

var filter={caseIdentifiter:'GFT1',userID:'2'};
Run Code Online (Sandbox Code Playgroud)

我想传递给ASP.NET MVC4 WebApi控制器GET

[HttpGet]
public IEnumerable<JHS.Repository.ViewModels.CaseList> Get([FromBody]Repository.InputModels.CaseListFilter filter)
{
  try
  {
    return Case.List(filter);
  }
  catch (Exception exc)
  {
    //Handle exception here...
    return null;
  }
}
Run Code Online (Sandbox Code Playgroud)

使用jQuery ajax调用

var request = $.ajax({
  url: http://mydomain.com/case,
  type: 'GET',
  data: JSON.stringify(filter),
  contentType: 'application/json; charset=utf-8',
  cache: false,
  dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)

ASP.NET控制器方法中的"filter"对象为"null".如果我将其更改为POST,则正确传递过滤器对象.有没有办法将复杂的对象传递给GET?

我不想将参数分离到URL,因为会有一些参数会使它效率低下,很难有可选参数,这样即使添加了新参数,方法签名也保持不变.

Chr*_*isP 37

找到这个StackOverflow问题/答案后

复杂类型在ApiController参数中变为null

控制器方法的[FromBody]属性需要是[FromUri],因为GET没有正文.在此更改之后,正确传递"过滤器"复杂对象.