使用WCF REST在PUT和POST之间的区别

我试图实现一个REST WCF,以探索PUT和POST动词之间的区别。 我已使用该服务在某个位置上传了一个文件。

服务实现如下:

[OperationContract] [WebInvoke(UriTemplate = "/UploadFile", Method = "POST")] void UploadFile(Stream fileContents); public void UploadFile(Stream fileContents) { byte[] buffer = new byte[32768]; MemoryStream ms = new MemoryStream(); int bytesRead, totalBytesRead = 0; do { bytesRead = fileContents.Read(buffer, 0, buffer.Length); totalBytesRead += bytesRead; ms.Write(buffer, 0, bytesRead); } while (bytesRead > 0); using (FileStream fs = File.OpenWrite(@"C:\temp\test.txt")) { ms.WriteTo(fs); } ms.Close(); 

}

客户端代码如下:

 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:1922 /EMPRESTService.svc/UploadFile"); request.Method = "POST"; request.ContentType = "text/plain"; byte[] fileToSend = File.ReadAllBytes(@"C:\TEMP\log.txt"); // txtFileName contains the name of the file to upload. request.ContentLength = fileToSend.Length; using (Stream requestStream = request.GetRequestStream()) { // Send the file as body request. requestStream.Write(fileToSend, 0, fileToSend.Length); //requestStream.Close(); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion, (int)response.StatusCode, response.StatusDescription); Console.ReadLine(); 

正在上载文件,并且响应状态代码将返回为“200 OK”。 在上传位置存在或不存在文件的情况下,satus代码是相同的。

我已将REST动词更改为PUT,状态代码与上面相同。

任何人都可以解释一下,在这种情况下我如何识别动词之间的差异? 我无法模拟从客户端代码生成连续请求。 如果这样做的行为不同,有人可以帮我修改ordrr中的客户端代码以连续发送连续的请求吗?

在创建新资源(在您的情况下为文件)时使用POST谓词,并且重复操作将在服务器上创建多个资源。 如果多次上传具有相同名称的文件在服务器上创建多个文件,则此动词将有意义。

当您更新现有资源或创建具有预定义ID的新资源时,将使用PUT谓词。 多个操作将重新创建或更新服务器上的相同资源。 如果为第二个,第三个…时间上传具有相同名称的文件将覆盖先前上载的文件,则此动词将有意义。