【问题标题】:How to pass an array using AngularJS $resource (performing a DELETE operation)如何使用 AngularJS $resource 传递数组(执行 DELETE 操作)
【发布时间】:2017-06-15 14:44:13
【问题描述】:

我有一个带有 DELETE 方法的 WebAPI 控制器,看起来像这样

public bool Delete([FromBody] List<int> stepIds)

我已经像这样设置了我的 $resource

api.mySteps = {delete: $resource('my_URL_Here/api/myController?stepIds=:stepIds,{},{delete:{method:'DELETE', hasBody: true}}) };

在从 UI 中单击删除按钮时,我正在这样做:

    api.mySteps.delete.delete({'stepIds':[1,2,3]}, 
                                 function(res){}, 
                                     function(err){} 
    );

通过此设置,我的 WebApi 控制器中的值为 NULL。

在浏览器控制台的“网络”选项卡中,我看到:

http://my_URL_Here/api/myController?stepIds=1,2,3

它不是作为数组传入的。

在 Fiddler 上,如果我这样做了 http://my_URL_Here/api/myController?stepIds=[1,2,3] 然后它工作正常。

如何将数组传递给 DELETE?

【问题讨论】:

    标签: angularjs asp.net-web-api angular-resource


    【解决方案1】:

    你需要将它指定给$resource: 例如

    'delete': {method: 'DELETE', isArray: true}
    

    这是另一个例子:

    var deleteRequest = $resource('/api/delete/post', {}, {
        'delete': {method: 'DELETE'}
    });
    deleteRequest.delete({'ids[]':[4,5,6]});
    

    然后你删除请求 URL:

    /api/delete/post?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3
    you get %5B%5D instead of []
    

    如果您希望返回数组而不是对象,那么您应该使用

    'delete': {method: 'DELETE', isArray: true}
    

    通过查看您的代码,您缺少方括号,所以这应该可以解决它:

     api.mySteps.delete.delete({'stepIds[]':[1,2,3]}, 
                                     function(res){}, 
                                         function(err){} 
        );
    

    【讨论】:

    • 这个解决方案对我不起作用。我仍然在我的 WebApi 控制器中收到NULL。数据需要以这种格式传递:http://localhost:5903/api/myController?stepIds=[1,2,3]。用你的方式,数据传入http://localhost:5903/api/myController?stepIds[]=1&amp;stepIds[]=2,这是控制器不希望的
    猜你喜欢
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2016-07-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多