[英]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.