Bla*_*ell 7 c# http asp.net-web-api system.net.httpwebrequest
我有一个场景,我需要调用我的Web API Delete方法,如下所示:
// DELETE: api/products/{id}/headers
[HttpDelete("{id}/headers")]
public void DeleteProductHeaders(int id, [FromBody] string query)
{
}
Run Code Online (Sandbox Code Playgroud)
诀窍是,为了获得查询,我需要通过正文发送它,而DeleteAsync没有像post那样的json参数.有谁知道如何使用c#中的System.Net.Http客户端来做到这一点?
// Delete a product's headers
public void DeleteProductHeaders(int id, string query)
{
using (var client = GetClient())
{
HttpResponseMessage response;
try
{
// HTTP DELETE
response = client.DeleteAsync($"api/products/{id}/headers").Result;
}
catch (Exception ex)
{
throw new Exception("Unable to connect to the server", ex);
}
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*son 15
这就是我完成它的方式
var request = new HttpRequestMessage(HttpMethod.Delete, "http://www.example.com/");
request.Content = new StringContent(JsonConvert.SerializeObject(object), Encoding.UTF8, "application/json");
await this.client.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)
HttpClient 如此设计的原因源于 HTTP 1.1 规范。虽然规范在技术上允许DELETE请求上的消息正文,但这是一种非常规做法,并且规范没有提供此处定义的明确语义。HttpClient 严格遵守 HTTP 规范,这意味着它不支持向 DELETE 请求添加消息正文。
因此,当尝试在 DELETE 请求中包含消息正文时,您可能会发现限制,这可以通过实际场景进行演示。如果您遇到此限制并且需要发送通常放置在消息正文中的数据,您可以考虑其他方法,例如使用此处描述的 HttpRequestMessage 。
从我个人的角度来看,我认为 DELETE 应该允许消息正文并且不会被服务器忽略,因为确实存在用例,例如您在这里提到的用例。
有关此主题的更全面的讨论,请参阅此资源。
编辑:只需使用 VsCode 的 ThunderClient Extension 或 Postman(而不是 Visual Studios app.http 文件)即可使用 Body 调用 DELETE api。
| 归档时间: |
|
| 查看次数: |
11249 次 |
| 最近记录: |