簡體   English   中英

使用WCF REST在PUT和POST之間的區別

[英]Difference between PUT and POST using WCF REST

我試圖實現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謂詞。 多個操作將重新創建或更新服務器上的相同資源。 如果為第二個,第三個...時間上傳一個具有相同名稱的文件將覆蓋以前上傳的文件,則此動詞將有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM