我在C#中發送POST請求時出現問題,並且似乎我誤解了一些HTTP基礎知識。所以基本上我執行問題的REST服務客戶,其工作如下:使用用戶名/密碼在C#中的RESTfull/HTTP請求中添加標題和發佈數據
- 製作POST請求,並得到令牌
- 使用此令牌頭(授權:TOKEN),同時使其他GET/POST/PUT請求
我使用WebRequest
進行GET請求(帶有授權標頭)並且它正在工作。但是當我使用下面的代碼,使PUT請求,服務是給「驗證失敗 - 在沒有登錄」的消息:
String url = String.Format("{0}/{1}", AN_SERVER, app);
WebRequest theRequest = WebRequest.Create(url);
theRequest.Method = "POST";
theRequest.ContentType = "text/x-json";
theRequest.ContentLength = json.Length;
Stream requestStream = theRequest.GetRequestStream();
requestStream.Write(Encoding.ASCII.GetBytes(json), 0, json.Length);
requestStream.Close();
theRequest.Headers.Add("Authorization", authToken);
HttpWebResponse response = (HttpWebResponse)theRequest.GetResponse();
我必須做一些小錯誤(至少我希望如此),同時發送POST請求。那麼我做錯了什麼?
謝謝。
你有沒有試過移動Headers.Add在requestStream之前?另一件看起來很奇怪的事情是沒有傳遞給請求的命名參數,比如requestStream.Write(「json =」+ json) –
@AI W:在requestStream解決問題之前移動標頭。爲什麼訂單在這裏很重要?非常感謝你。我花了一天的時間試圖「學習」這一點,30分鐘的Stackoverflow更有幫助。你可以把它寫成答案,以便我可以接受它。再次感謝。順便說一句,它是json對象被放入請求,而不是命名參數。 –
服務器是否接受非授權服務的PUT請求? IIRC PUT(和DELETE)在某些版本的IIS上未默認啓用,因此其他服務器也可能如此。 – carlosfigueira