GET / DELETE背后的原因不能在webapi中有正文

为什么像GETDELETE这样的HttpMethod不能包含body

 public Task GetAsync(Uri requestUri); public Task DeleteAsync(string requestUri); 

同样在Fiddler,如果我提供一个身体,背景会变成红色。 但它仍将在身上执行。

小提琴图像

因此,作为替代方案,我使用SendAsync()因为它接受HttpRequestMessage ,它可以包含HttpMethod以及内容

 // other codes Category category = new Category(){ Description = "something" }; string categoryContent = JsonConvert.SerializeObject(category); string type = "application/json"; HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Delete, "-page-") HttpContent content = new StringContent(categoryContent, Encoding.UTF8, type); HttpClient client = new HttpClient(); message.Content = content; await client.SendAsync(message, HttpCompletionOption.ResponseHeadersRead); // other codes 

我错过了别的什么吗?

根据HTTP标准,GET方法旨在检索数据,因此不需要提供请求体。

添加请求正文违反了定义的规则。 因此禁止这样做。

这同样适用于DELETE方法。