2017-08-01 642 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”设置为***请求内容***的长度(以字节为单位)。 –