RestClient DELETE操作Json错误

时间:2013-03-27 11:55:13

标签: c# asp.net

我正在尝试使用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

由于

1 个答案:

答案 0 :(得分:1)

看起来即使HTTP规范没有明确说明DELETE不应该有正文,但很多网络服务器(或网络代理)都会忽略它。

从语义上讲,当使用DELETE时,uri应该将资源标识为DELETE。这有点像使用GET。同样,对于GET,规范并不禁止正文,但是很少有Web服务器(或Web代理)实际支持GET请求上的正文。

有关详细信息,请参阅this SO post

因此,实施DELETE的更好方法是将BasketItemReferenceGuidBasketReferenceGuid放在uri模板中。