client.DeleteAsync - 在请求体中包含对象

11 浏览
0 Comments

client.DeleteAsync - 在请求体中包含对象

我有一个ASP.NET MVC 5网站 - 在C#客户端代码中,我使用HttpClient.PutAsJsonAsync(path, myObject)来调用一个Json API(该API也是我创建的Web API)。

client.BaseAddress = new Uri("http://mydomain");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PutAsJsonAsync("api/something", myObj);

我想用Delete动词做同样的事情。然而,client.DeleteAsync不允许传递一个对象作为请求体(我想在URI中记录删除的原因和要删除的项的Id)。

有没有办法实现这个?

0
0 Comments

问题的原因是C#中的client.DeleteAsync方法不支持在请求体中包含对象。因此,需要使用较低级别的方法来发送带有请求体的DELETE请求。解决方法是创建一个HttpRequestMessage对象,设置请求的方法和URI,并在内容(Content)属性中包含要发送的对象的序列化版本。然后,使用client.SendAsync方法发送请求,并等待响应。

虽然在DELETE请求中使用请求体不是常见的做法,但也不是不可行的。RFC 7231对DELETE方法没有明确规定请求体的语义。尽管如此,将请求体放入查询字符串中可能是更好的选择。虽然这种方法不完美,但可以满足一些特定的需求。

C#中的client.DeleteAsync方法不支持在请求体中包含对象。解决方法是使用较低级别的方法发送带有请求体的DELETE请求,或者将请求体放入查询字符串中。这两种方法都有一些不足,但可以根据具体需求进行选择。

0