2017-08-01 640 views
0

我只是試圖從POST請求獲取REST-API響應。C#REST API - POST請求:「您必須提供請求主體..」

收到此錯誤:

You must provide a request body if you set ContentLength>0 or SendChunked==true. Do this by calling [Begin]GetRequestStream before [Begin]GetResponse

這裏是我的代碼:

public enum httpVerb 
{ 
    GET, 
    POST, 
    PUT, 
    DELETE 
} 

class RestProvider 
{ 
    public string uri { get; set; } 
    public httpVerb httpMethod { get; set; } 

    public RestProvider() 
    { 
     uri = ""; 
     httpMethod = httpVerb.POST; 
    } 

    public string makeRequest() 
    { 
     string strResponseValue = string.Empty;   
     var request = (HttpWebRequest)WebRequest.Create(uri); 
     request.Method = httpMethod.ToString(); 
     request.ContentLength = uri.Length; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     HttpWebResponse response = null; 

     try 
     { 
      response = (HttpWebResponse)request.GetResponse(); 

      using (Stream responseStream = response.GetResponseStream()) 
      { 
       if (responseStream != null) 
       { 
        using (StreamReader reader = new StreamReader(responseStream)) 
        { 
         strResponseValue = reader.ReadToEnd(); 
        } 
       } 
      } 
     } 

     catch (Exception ex) 
     { 
      strResponseValue = "{\"errorMessages\":[\"" + ex.Message.ToString() + "\"],\"errors\":{}}"; 
     } 

     finally 
     { 
      if (response != null) 
      { 
       ((IDisposable)response).Dispose(); 
      } 
     } 

     return strResponseValue; 
    } 
} 

任何想法?

回答

1

這個:request.ContentLength = uri.Length;是錯的。這不是ContentLength的目的。單獨留下ContentLength(在這種情況下,它將爲零),或者發送一些請求內容並將ContentLength設置爲您要發送的請求內容的長度。 uri不是請求內容。

+0

我如何得到整個請求的長度? –

+0

'ContentLength'不是整個請求的長度。這是***請求內容***的長度。而且你似乎沒有發送任何***請求內容***。因此,將ContentLength保留爲零。如果您發送***請求內容***,則需要將「ContentLength」設置爲***請求內容***的長度(以字節爲單位)。 –