【问题标题】:HttpClient.DeleteAsync with multiple parameters具有多个参数的 HttpClient.DeleteAsync
【发布时间】:2019-09-05 14:13:42
【问题描述】:

我正在尝试使 HttpDelete 请求具有多个参数。我不能使用正文,也不想使用 HttpPost。

这是我的行动:

[HttpDelete("{ids}")]
public async Task Delete(int[] ids)
{
    foreach(int id in ids)
        await _repository.DeleteLogAsync(id);
}

这是我用于发送请求的代码:

public async Task DeleteLogs(int[] ids)
{
    var queryString = HttpUtility.ParseQueryString(string.Empty);
    foreach (var id in ids)
    {
        queryString.Add("id", id.ToString());
    }

    var url = _configuration["BaseUrl"] + _configuration["Endpoint"] + "/" + queryString.ToString();

    using (var httpClient = new HttpClient())
    {                
        var response = await httpClient.DeleteAsync(url);
        response.EnsureSuccessStatusCode();
    }
}

我也使用 Swagger,它向我展示了以下内容:

如果我尝试完全按照上面显示的方式发送请求,我会收到 415 响应。我还觉得奇怪的是 swagger 需要两个参数,一个在正文中,一个在查询中。

所以我尝试在我的操作中使用[FromQuery]。在这种情况下,请求通过,但 int 数组在我的操作中为空。所以我有点卡住了,不知道如何继续。根据this 的回答,它应该可以工作。

谁能告诉我我做错了什么?

【问题讨论】:

  • 对 c# 代码使用嗅探器并与招摇的结果进行比较。查看标头,看看 c# 标头是否匹配 swagger。

标签: c# parameters httpclient asp.net-core-2.2 http-delete


【解决方案1】:

从动作中移除路由模板并用[FromQuery]装饰参数

//DELETE {endpoint}?ids=value1&ids=value2&...
[HttpDelete()]
public async Task<IActionResult> Delete([FromQuery]int[] ids) {
    foreach(int id in ids)
        await _repository.DeleteLogAsync(id);

    return Ok();
}

并在客户端使用正确的参数名称构造查询字符串

static readonly Lazy<HttpClient> httpClient = new Lazy<HttpClient>();
public async Task DeleteLogs(int[] ids) {
    var queryString = new QueryString(string.Empty);
    foreach (var id in ids) {
        queryString.Add("ids", id.ToString());
    }

    var url = _configuration["BaseUrl"] + _configuration["Endpoint"] + "/" + queryString.ToString();

    var response = await httpClient.Value.DeleteAsync(url);
    response.EnsureSuccessStatusCode();        
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 2011-04-15
    • 2011-08-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多