Web API HttpDelete - 如何调用删除 API 方法并在 [FromBody] 中发送模型

Posted

技术标签:

【中文标题】Web API HttpDelete - 如何调用删除 API 方法并在 [FromBody] 中发送模型【英文标题】:Web API HttpDelete - how to call delete API method and send a model in [FromBody] 【发布时间】:2020-08-27 05:20:08 【问题描述】:

我正在尝试通过在 url 中发送参数来调用 HttpDelete RESTful Web API 方法。调用成功。

例子

string url = path + "deletemethodName?Id=" + Convert.ToInt32(idpamameter) + "&name=" + nameParameter;
                using (HttpClient client = new HttpClient())
                
                    using (HttpResponseMessage response = client.DeleteAsync(url).Result)
                    
                        if (response.IsSuccessStatusCode)
                        
                            return Json(response.Content.ReadAsStringAsync().Result);
                        
                       
                

有没有办法——在调用 HttpDelete 方法时,就像我们使用在 body 中发送模型数据调用 POST 方法和在 API 方法中使用 [FromBody] 来访问模型数据而不是在网址?

由于我的 HttpDelete 方法中有超过 5 个参数要附加到 URL 中 - 我希望发送模型数据。

提前致谢。

【问题讨论】:

【参考方案1】:

更高级别的DeleteAsync 不支持body,但我们可以在“很长的路”中做到这一点:

var request = new HttpRequestMessage 
    Method = HttpMethod.Delete,
    RequestUri = new Uri("http://mydomain/api/something"),
    Content = new StringContent(JsonConvert.SerializeObject(myObj), Encoding.UTF8, "application/json")
;
var response = await client.SendAsync(request);

【讨论】:

谢谢你试试这个。这不会影响性能知道吗?【参考方案2】:

您可以通过 post 方法删除记录。 如果您以表格格式显示您的记录,那么我们使用 Foreach 循环并在该循环内使用 html 表单,如下所示:

using(Html.BeginForm("ACTIONNAME","CONTROLLERNAME", new id=item.id, ..... ))

然后添加

 <input typer="submit" value="Delete"/>

用于将数据发布到您的操作控制器。

【讨论】:

以上是关于Web API HttpDelete - 如何调用删除 API 方法并在 [FromBody] 中发送模型的主要内容,如果未能解决你的问题,请参考以下文章

带正文的 HttpDelete

无法在asp dotnet core web api中创建HttpGet和HttpDelete。

405 方法不允许 - ASP.NET Web API

HttpDelete WIth Body

HttpPost和HttpPut有什么不同?在Web Api [重复]

如何在 scala/etcd 中使用 HttpDelete 和 HttpPut