5

PUT 動詞と POST 動詞の違いを調べるために、REST WCF を実装しようとしました。サービスを使用してある場所にファイルをアップロードしました。

サービスの実装は次のとおりです。

[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」として返されています。アップロード先にファイルが存在する場合も存在しない場合もステータスコードは同じです。

REST 動詞を PUT に変更しました。ステータス コードは上記と同じです。

この文脈で動詞の違いをどのように識別できるか、誰か説明できますか? クライアントコードからの継続的なリクエストの生成をシミュレートできませんでした。そうすることで動作が異なる場合、 ordrr のクライアントコードを変更して、継続的なリクエストを連続して送信するのを手伝ってくれる人はいますか?

4

1 に答える 1

2

POST動詞は、新しいリソース(この場合はファイル)を作成するときに使用され、操作を繰り返すとサーバー上に複数のリソースが作成されます。この動詞は、同じ名前のファイルを複数回アップロードすると、サーバー上に複数のファイルが作成される場合に意味があります。

PUT動詞は、既存のリソースを更新するとき、または事前定義されたIDで新しいリソースを作成するときに使用されます。複数の操作を行うと、サーバー上で同じリソースが再作成または更新されます。この動詞は、2回目、3回目...に同じ名前のファイルをアップロードすると、以前にアップロードされたファイルが上書きされる場合に意味があります。

于 2012-05-13T17:48:07.710 に答える