Asp.net mvc 4 如何使用$http将int数组发布到ASP.NETWebAPI控制器方法

Asp.net mvc 4 如何使用$http将int数组发布到ASP.NETWebAPI控制器方法,asp.net-mvc-4,angularjs,asp.net-web-api,Asp.net Mvc 4,Angularjs,Asp.net Web Api,我试图使用$http to ASP.NETWebAPI控制器方法发布一个要从服务中删除的整数数组。我两者都试过了 [HttpDelete] public HttpResponseMessage DeleteMany(int[] ids) { } [HttpDelete] public HttpResponseMessage DeleteMany(DeleteManyDto dto) { } public class DeleteManyDto { public int[] Ids {

我试图使用$http to ASP.NETWebAPI控制器方法发布一个要从服务中删除的整数数组。我两者都试过了

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] ids) { }

[HttpDelete]
public HttpResponseMessage DeleteMany(DeleteManyDto dto) { }

public class DeleteManyDto
{
    public int[] Ids {get;set;}
}
我一直把参数设为空。我试过几种不同的角度服务。这里有一个例子

this.deleteMany = function(ids) {
// ids is an int array. e.g. [1,4,6]
    return $http.delete('api/Foo/DeleteMany', { toDelete: ids }).then(function(result) {
        return result.status;
    });
};
有人知道我会错过什么吗

更新:拼写错误。包含来自HTTP请求的调试

Request URL:http://localhost:54827/api/Foo/DeleteMany
Request Method:DELETE
Status Code:500 Internal Server Error
Request Headersview source
Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Cookie:__RequestVerificationToken=blabla
Host:localhost:54827
Origin:http://localhost:54827
Pragma:no-cache
Referer:http://localhost:54827/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Response Headersview source
上面的代码没有生成任何请求负载。当我进行更新时,我会看到请求负载。范例

Request Payloadview parsed
{"id":4,"name":"zzzz", "bar": 2}

值得一提的是,我使用的是Angular 1.2.rc3。您的API中有一个拼写错误:

public HttpResponseMessage DeleteManay(int[] ids) { }
应该是:

public HttpResponseMessage DeleteMany(int[] ids) { }
更新:


似乎是问题中的拼写错误。

您的API中有拼写错误:

public HttpResponseMessage DeleteManay(int[] ids) { }
应该是:

public HttpResponseMessage DeleteMany(int[] ids) { }
更新:


似乎是问题中的拼写错误。

您的API中有拼写错误:

public HttpResponseMessage DeleteManay(int[] ids) { }
应该是:

public HttpResponseMessage DeleteMany(int[] ids) { }
更新:


似乎是问题中的拼写错误。

您的API中有拼写错误:

public HttpResponseMessage DeleteManay(int[] ids) { }
应该是:

public HttpResponseMessage DeleteMany(int[] ids) { }
更新:


似乎是问题中的拼写错误。

尝试将控制器方法签名更改为:

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] toDelete) { }
或者,如果使用ViewModel,则将delete调用更改为:

return $http.delete('api/Foo/DeleteMany', { Ids: ids }).then(function(result) {
        return result.status;
    });
编辑:

但我认为真正的问题在于$http.delete调用。您不能在HTTP中使用DELETE动词发送正文,因为MVC绑定了来自消息正文或url的数据,所以您的数组没有绑定。 尝试使用POST请求实现DeleteMany

您可以看到,在文档中,delete方法的定义中没有数据参数

或者您也可以尝试这种方法,将数据添加到消息头:


尝试将控制器方法签名更改为:

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] toDelete) { }
或者,如果使用ViewModel,则将delete调用更改为:

return $http.delete('api/Foo/DeleteMany', { Ids: ids }).then(function(result) {
        return result.status;
    });
编辑:

但我认为真正的问题在于$http.delete调用。您不能在HTTP中使用DELETE动词发送正文,因为MVC绑定了来自消息正文或url的数据,所以您的数组没有绑定。 尝试使用POST请求实现DeleteMany

您可以看到,在文档中,delete方法的定义中没有数据参数

或者您也可以尝试这种方法,将数据添加到消息头:


尝试将控制器方法签名更改为:

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] toDelete) { }
或者,如果使用ViewModel,则将delete调用更改为:

return $http.delete('api/Foo/DeleteMany', { Ids: ids }).then(function(result) {
        return result.status;
    });
编辑:

但我认为真正的问题在于$http.delete调用。您不能在HTTP中使用DELETE动词发送正文,因为MVC绑定了来自消息正文或url的数据,所以您的数组没有绑定。 尝试使用POST请求实现DeleteMany

您可以看到,在文档中,delete方法的定义中没有数据参数

或者您也可以尝试这种方法,将数据添加到消息头:


尝试将控制器方法签名更改为:

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] toDelete) { }
或者,如果使用ViewModel,则将delete调用更改为:

return $http.delete('api/Foo/DeleteMany', { Ids: ids }).then(function(result) {
        return result.status;
    });
编辑:

但我认为真正的问题在于$http.delete调用。您不能在HTTP中使用DELETE动词发送正文,因为MVC绑定了来自消息正文或url的数据,所以您的数组没有绑定。 尝试使用POST请求实现DeleteMany

您可以看到,在文档中,delete方法的定义中没有数据参数

或者您也可以尝试这种方法,将数据添加到消息头:


对不起。这在我的代码中是正确的。我只是直接在这里的文本编辑器中输入。它正在调用该方法。ids参数只是空的。所以我认为路线匹配是有效的。对不起。这在我的代码中是正确的。我只是直接在这里的文本编辑器中输入。它正在调用该方法。ids参数只是空的。所以我认为路线匹配是有效的。对不起。这在我的代码中是正确的。我只是直接在这里的文本编辑器中输入。它正在调用该方法。ids参数只是空的。所以我认为路线匹配是有效的。对不起。这在我的代码中是正确的。我只是直接在这里的文本编辑器中输入。它正在调用该方法。ids参数只是空的。因此,我认为路由匹配正在工作。请求json看起来如何。请参阅浏览器调试器控制台中的,并在此处发布一些详细信息。根据HTTP语义,DELETE应删除考虑中的资源。url指向资源位置,因此不需要任何有效负载。“你想做的不是严格遵守DELETE的用法。”Chandermani有人建议我使用post而不是。我想这不会很平静。我们应该一次删除一个吗?即使可能有100个,请求json看起来如何。请参阅浏览器调试器控制台中的,并在此处发布一些详细信息。根据HTTP语义,DELETE应删除考虑中的资源。url指向资源位置,因此不需要任何有效负载。“你想做的不是严格遵守DELETE的用法。”Chandermani有人建议我使用post而不是。我想这不会很平静。我们应该一次删除一个吗?即使可能有100个,请求json看起来如何。请参阅浏览器调试器控制台中的,并在此处发布一些详细信息。根据HTTP语义,DELETE应删除考虑中的资源。url指向资源位置,因此不需要任何有效负载。“你想做的不是严格遵守DELETE的用法。”Chandermani有人建议我使用post而不是。我想这不会很平静。我们应该一次删除一个吗?即使可能有100个?需求如何