【问题标题】:Passing array of integers to webapi Method将整数数组传递给 webapi 方法
【发布时间】:2013-05-04 13:42:46
【问题描述】:

我正在尝试传递一个 int 数组,但我无法在 webapi 方法中获取值

var postData = { "deletedIds": deletedIds };

    $.ajax({
        type: "DELETE",
        traditional: true,
        dataType: 'json',
        contentType: 'application/json',
        cache: false,
        url: "/api/Management/Models",
        data: JSON.stringify(postData),
        success: ModelDeleted,
        error: ModelNotDeleted
    });

在 apiController 中:

[HttpDelete]
        public bool DeleteModel(int[] deletedIds)
        {
            return modelsRepository.DeleteModels(deletedIds);
        }

【问题讨论】:

  • 我尝试删除 JSON.stringify 但仍然无法正常工作

标签: asp.net-mvc asp.net-web-api parameter-passing model-binding


【解决方案1】:

您的代码在我看来还不错。请定义“deletedIds”对象的结构。 一个建议是使用 新数组() 初始化 deletedIds 属性并删除 JSON.stringify() 的对象。 类似的问题被问到here

编辑

Web API 支持以多种方式解析内容数据,但它不处理多个发布的内容值。您的问题的解决方案可能是创建一个具有 int[] 类型属性的 ViewModel。 就像下面的代码,

public class SimpleViewModel
{
    public int[] deletedIds{ get; set; }
}

//Controller
[HttpDelete]
    public bool DeleteModel(SimpleViewModel deletedIds)
    {
        return modelsRepository.DeleteModels(deletedIds.deletedIds);
    }

并将其用作参数类型。

【讨论】:

  • 我尝试使用新数组,但 webapi 方法参数仍然为空
  • 感谢您的回复,但您引用的问题不一样,当我在常规控制器中使用操作方法时,我的代码工作正常,但当 url 指向 webapi 时,它无法获取数据
  • 使用firebug测试post数据。
  • 客户端数据正常,但问题是 webapi 使用的模型绑定与 mvc 不同
  • 使用 [FromUri] 属性装饰您的操作参数。 this 帖子可能对您有所帮助。
【解决方案2】:

最后,基于@Shashank Answer 成功,代码修改为:

var deletedIds = new Array();

deletedIds.push(modelId);

var postData = { "DeletedIds": deletedIds };
$.ajax({
    type: "Delete",
    traditional: true,
    dataType: 'json',
    cache: false,
    url: "/api/Management/Models",
    data: postData,
    success: ModelDeleted,
    error: ModelNotDeleted
});

和 apiController :

[HttpDelete]
        public bool DeleteModels(DeleteViewModel dvm)
        {
            return modelsRepository.DeleteModels(dvm.DeletedIds);
        }

对于 DeleteViewModel :

public class DeleteViewModel
    {
        public int[] DeletedIds { get; set; }
    }

【讨论】:

    【解决方案3】:

    我怀疑 stringify 位弄乱了您的对象 - 您是否尝试将其分配给变量以查看它是否是预期的格式?

    你现在正在把整个事情串起来:

    { "deletedIds": deletedIds }

    虽然您可能想要作为帖子正文发送的是:

    { "deletedIds": JSON.stringify(deletedIds) }

    【讨论】:

    • 不管怎样,如果你的控制器方法需要整数,为什么要在 JS 中对它们进行字符串化?
    • stringify 只是一个尝试,我在常规控制器中编写了一个测试操作方法,它可以工作 mvc modelbinder 可以工作,但 webapi 不能!!
    • @MuhammadAlaa - 发布您与请求一起发送的确切 JSON。控制器方法是否被击中?你得到一个空数组吗?
    • 我试图发送静态数据只是为了测试我在 apicontroller 方法中得到一个空数组
    • @Muhammad Alaa - 在此处发布您发送的 JSON,无论是否静态,否则我无法帮助您
    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多