c# - 复杂类型在 ApiController 参数中为空

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

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

我的 ApiController 获取方法:

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) .

https://stackoverflow.com/questions/12916340/

相关文章:

json - jq 条件输出

database - Fabric.js - 如何使用自定义属性在服务器上保存 Canvas

json - 从 HttpServletRequest 检索 JSON 对象文字

javascript - JSON 中空与空的约定是什么?

json - 将 JSON 序列化为查询字符串的标准化方法?

php - 使用 PHP 创建 REST API

jquery - 如何使用 JQuery 将数据放入 Rails

java - Gson 是否必须使用默认的无参数构造函数?

c# - asp.net asmx Web 服务返回 xml 而不是 json

javascript - 'JSON' 是 Internet Explorer 中 JavaScri