5 Stimmen

Unterschied zwischen PUT und POST bei WCF REST

Ich habe versucht, ein REST WCF zu implementieren, um den Unterschied zwischen den Verben PUT und POST zu erkunden. Ich habe eine Datei an einem Ort mit Hilfe des Dienstes hochgeladen.

Die Implementierung des Dienstes sieht folgendermaßen aus:

[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();

}

Der Client-Code lautet wie folgt:

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();

Die Datei wird hochgeladen und als Antwortstatuscode wird "200 OK" zurückgegeben. Der Statuscode ist derselbe, unabhängig davon, ob die Datei am Hochladeort vorhanden ist oder nicht.

Ich habe das REST-Verb in PUT geändert und der Statuscode ist derselbe wie oben.

Kann mir jemand erklären, wie ich die Unterschiede zwischen den Verben in diesem Zusammenhang erkennen kann? Ich war nicht in der Lage, die Generierung kontinuierlicher Anfragen für den Client-Code zu simulieren. Wenn sich das Verhalten dabei unterscheidet, könnte mir jemand dabei helfen, den Clientcode in ordrr zu ändern, um kontinuierliche Anfragen in einer Reihe zu senden?

2voto

Dmitry S. Punkte 8069

Das Verb POST wird verwendet, wenn Sie eine neue Ressource (in Ihrem Fall eine Datei) erstellen und wiederholte Operationen mehrere Ressourcen auf dem Server erstellen würden. Dieses Verb ist sinnvoll, wenn durch das mehrfache Hochladen einer Datei mit demselben Namen mehrere Dateien auf dem Server erstellt werden.

Das Verb PUT wird verwendet, wenn Sie eine vorhandene Ressource aktualisieren oder eine neue Ressource mit einer vordefinierten ID erstellen. Mehrere Operationen würden dieselbe Ressource auf dem Server neu erstellen oder aktualisieren. Dieses Verb wäre sinnvoll, wenn das Hochladen einer Datei mit demselben Namen zum zweiten, dritten... Mal die zuvor hochgeladene Datei überschreiben würde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X