HTTP DELETE
对于请求中是否允许该主体的问题,有不同的解释。参见这个例子。在HTTP 1.1 规范中,它没有被明确禁止。在我看来,你不应该在HTTP DELETE
.
尽管如此,我认为您应该使用mysite/myobject/objectId
( shop.com/order/1234
) 之类的 URL,其中objectId
( url 的一部分) 是附加信息。作为替代方案,您可以使用URL 参数:mysite/myobject?objectName=table&color=red
在请求中向服务器发送附加信息HTTP DELETE
。以“?”开头的部分 是由dy '&' 分隔的urlencoded参数。
如果您想发送更复杂的信息,您可以将数据转换为关于DataContractJsonSerializer或JavaScriptSerializer的 JSON,然后将转换后的数据(我myJsonData
稍后命名的字符串)也作为参数发送:mysite/myobject?objectInfo=myJsonData
。
如果您需要发送过多的附加数据作为HTTP DELETE
请求的一部分,从而导致 URL 长度出现问题,那么您最好更改应用程序的设计。
更新:如果您确实希望通过 HTTP DELETE 发送一些正文,您可以执行此操作,例如如下
// somewhere above add: using System.Net; and using System.IO;
WebClient myWebClient = new WebClient ();
// 1) version: do simple request
string t= myWebClient.UploadString ("http://www.examples.com/", "DELETE", "bla bla");
// will be send following:
//
// DELETE http://www.examples.com/ HTTP/1.1
// Host: www.examples.com
// Content-Length: 7
// Expect: 100-continue
// Connection: Keep-Alive
//
//bla bla
// 2) version do complex request
Stream stream = myWebClient.OpenWrite ("http://www.examples.com/", "DELETE");
string postData = "bla bla";
byte[] myDataAsBytes = Encoding.UTF8.GetBytes (postData);
stream.Write (myDataAsBytes, 0, myDataAsBytes.Length);
stream.Close (); // it send the data
// will be send following:
//
// DELETE http://www.examples.com/ HTTP/1.1
// Host: www.examples.com
// Content-Length: 7
// Expect: 100-continue
//
// bla bla
// 3) version
// create web request
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create ("http://www.examples.com/");
webRequest.Method = "DELETE";
webRequest.ServicePoint.Expect100Continue = false;
// post data
Stream requestStream = webRequest.GetRequestStream ();
StreamWriter requestWriter = new StreamWriter (requestStream);
requestWriter.Write (postData);
requestWriter.Close ();
//wait for server response
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse ();
// send following:
// DELETE http://www.examples.com/ HTTP/1.1
// Host: www.examples.com
// Content-Length: 7
// Connection: Keep-Alive
//
// bla bla
完整的代码可能会更复杂一些,但这个已经可以工作了。尽管如此,我仍然要说,HTTP DELETE 请求正文中的 Web 服务所需的数据设计不佳。