将内容传递给deleteasync

时间:2016-03-04 15:52:41

标签: visual-studio-2012 asp.net-web-api asp.net-web-api2

我有一个web api HttpDelete控制器方法,它接受一组id作为参数。我想知道如何将一组id传递给方法。

我试图传递类似于putasync和postasync的id,在那里我可以jsonify ids。 DeleteAsync,似乎不接受类似于其他web api函数的json内容。下面是我的HttpDelete控制器方法:

    [HttpDelete]
    [Route("delete")]
    public HttpResponseMessage DeleteUsers(int[] ids)
    {
        if (ids != null)
        {
            ...Do stuff
        }

        throw error;
    }

我试图使用以下方法来使用此方法:

    var Ids = new[] { 1,2,3 };
    string jsonString = JsonConvert.SerializeObject(Ids);
    var content = new StringContent(jsonString, Encoding.UTF8, _mediaType);

    response = HttpClient.DeleteAsync(endpoint,content).Result;

那么如何将多个id作为数组传递给此方法?

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:1)

VS2012中的DeleteAsync似乎不允许发送HttpContent,但是VS2013会发送。 See MSDN page here

所以我安装了VS2013,然后在我的VS2012项目中添加了对Microsoft.VisualStudio.Services.WebApi的引用。

我现在可以使用DeleteAsync和HttpContent。

答案 1 :(得分:0)

HttpClient.DeleteAsync似乎没有提供传递数据的重载。为什么不使用带有属性定义路由的POST方法,将数组发送到该方法,并在该特定POST方法中执行删除逻辑?

或许像这样:

[Route("api/controller/deleteObjects")]
[HttpPost]
public async Task DeleteObjects([FromBody]IEnumerable<int> ids)
{
    // whatever mechanism you're using to delete
}

答案 2 :(得分:0)

[Route("api/APIController/delete")]
[HttpDelete]

public async Task DeleteObjects([FromUri]int[] ids)
{
    // whatever you want to do
}

您可以从uri发送类似参数的ID。它对我有用。

 var Ids = new[] { 1,2,3 };
$.ajax({
    method:'DELETE',
    url: "/api/APIController/delete",
    params: {
       ids : Ids,
    },
    //additions if you need

    success: function(response) {

    },
    error: function(xhr) {

    }
});