我在JavaScript中有以下复杂对象,其中包含过滤器选项
var filter={caseIdentifiter:'GFT1',userID:'2'};
我想传递给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; } }
使用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' });
ASP.NET控制器方法中的“过滤器”对象为“空”。如果我将其更改为POST,则过滤器对象将正确传递。有没有办法将复杂的对象传递给GET?
我不想将参数分离到URL,因为会有许多参数使效率低下,很难拥有可选参数,并且即使添加了新参数,方法签名也保持不变。
找到这个StackOverflow问题/答案之后
复杂类型在ApiController参数中为null
控制器方法上的[FromBody]属性需要为[FromUri],因为GET没有主体。进行此更改后,将正确传递“过滤器”复杂对象。