我正在尝试使用RestClient进行删除操作,但我无法在请求正文中包含我的Json对象。这是我的代码:
var client = new RestClient(WebService);
var request = new RestRequest(string.Format("/api/v1/{0}/{1}", controller, action), method);
request.AddHeader("Accept", ContentTypeApplicationJson);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Content-Type", ContentTypeApplicationJson);
request.AddCookie(".ASPXAUTH", AspxAuth);
request.AddBody(jsonObjectRequest);
var response = client.Execute(request);
var jsonResponse = string.Empty;
using (var stream = new MemoryStream(response.RawBytes))
{
stream.Position = 0;
var sr = new StreamReader(stream);
jsonResponse = sr.ReadToEnd();
}
var jObjectDeserialize = GetJObjectDeserialize(jsonResponse);
在我的示例中,ContentTypeApplicationJson = application / json和jsonObject是一个包含以下内容的对象:
{ “BasketItemReferenceGuid”:“示例字符串1”, “BasketReferenceGuid”:“示例字符串2” }
这是我在Fiddler的请求
DELETE http://local.webapi.com/api/v1/BasketV3Products/ HTTP/1.1 Accept: application/json Content-Type: application/json User-Agent: RestSharp 102.4.0.0 Host: local.webapi.com Cookie: .ASPXAUTH=E6D216034E2CB1A22466A501392B1E2E46601E345B8A0E7743D76CF2270ACFC8ED3C9F1F2F477C4499267222A250E4490291381EE68FE719E094EF1ACDD619B4D792341988F80CB67E8B5037D8ACF9FBABB74DE1E75A530AB432D85722D647771C6C576F8E810257CE9E60117DCEEFBD949EAD9E64C84898BDC5D691F957CE6266CF5652C693B86ED1D55907AAC5DC68 Content-Length: 0 Accept-Encoding: gzip, deflate
由于
答案 0 :(得分:1)
看起来即使HTTP规范没有明确说明DELETE
不应该有正文,但很多网络服务器(或网络代理)都会忽略它。
从语义上讲,当使用DELETE
时,uri应该将资源标识为DELETE
。这有点像使用GET
。同样,对于GET
,规范并不禁止正文,但是很少有Web服务器(或Web代理)实际支持GET
请求上的正文。
有关详细信息,请参阅this SO post。
因此,实施DELETE
的更好方法是将BasketItemReferenceGuid
和BasketReferenceGuid
放在uri模板中。