Причина GET/DELETE не может иметь тело в webapi

Почему HttpMethod, например GET и DELETE, не может содержать тело?

public Task<HttpResponseMessage> GetAsync(Uri requestUri);
public Task<HttpResponseMessage> DeleteAsync(string requestUri);

также в Fiddler, если я поставлю тело, фон станет красным. Но все же он будет выполняться с телом на нем.

Fiddle Image

Итак, в качестве альтернативы я использовал 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

Я пропустил что-то еще?

Ответ 1

Для HTTP-стандартов метод GET предназначен для извлечения данных, поэтому нет необходимости предоставлять тело запроса.

Добавление тела запроса нарушает определенные правила. Поэтому это запрещено.

То же самое относится к методу DELETE.