我不知道为什么我的参数“ParametroFiltro Filtro”为空,而其他参数“page”和“pageSize”却正常。

public class ParametroFiltro
{
    public string Codigo { get; set; }
    public string Descricao { get; set; }
}

我的ApiController Get方法:
public PagedDataModel<ParametroDTO> Get(ParametroFiltro Filtro, int page, int pageSize)

我的ajax电话:
var fullUrl = "/api/" + self.Api;
$.ajax({
    url: fullUrl,
    type: 'GET',
    dataType: 'json',
    data: { Filtro: { Codigo: '_1', Descricao: 'TESTE' }, page: 1, pageSize: 10 },
    success: function (result) {
        alert(result.Data.length);
        self.Parametros(result.Data);
    }
});

最佳答案

您正在尝试使用GET方法发送复杂的对象。失败的原因是GET方法不能包含主体,并且所有值都已编码到URL中。您可以使用[FromUri]来完成这项工作,但是首先您需要更改客户端代码:

$.ajax({
    url: fullUrl,
    type: 'GET',
    dataType: 'json',
    data: { Codigo: '_1', Descricao: 'TESTE', page: 1, pageSize: 10 },
    success: function (result) {
        alert(result.Data.length);
        self.Parametros(result.Data);
    }
});

这样,如果您更改操作方法,那么[FromUri]将能够直接从URL提取复杂的对象属性:
public PagedDataModel<ParametroDTO> Get([FromUri]ParametroFiltro Filtro, int page, int pageSize)

您以前的方法更喜欢使用可以具有主体的POST方法(但是您仍然需要使用JSON.stringify()将主体格式化为JSON)。

09-30 15:16
查看更多