2017-08-01 3 views
0

Ich versuche nur, eine REST-API-Antwort von einer POST-Anfrage zu erhalten.C# -REST-API - POST-Anforderung: "Sie müssen einen Anfragetext bereitstellen .."

immer diese Fehlermeldung:

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

Hier ist mein Code:

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; 
    } 
} 

Irgendwelche Ideen?

Antwort

1

Dies ist: request.ContentLength = uri.Length; ist falsch. Das ist nicht, was ContentLength ist. Entweder lassen Sie ContentLength allein, (in diesem Fall wird es Null sein) oder senden Sie einige Anfrage Inhalt und setzen Sie ContentLength auf die Länge der Anfrage Inhalte, die Sie senden. Die uri ist kein Anforderungsinhalt.

+0

Wie bekomme ich die Länge der gesamten Anfrage? –

+0

'ContentLength' ist nicht die Länge der gesamten Anfrage. Es ist die Länge des *** Anfrage-Inhalts ***. Und du scheinst keinen *** Anfrage-Inhalt zu senden ***. Lassen Sie 'ContentLength' also auf Null. Wenn Sie einen *** -Anforderungsinhalt *** senden würden, müssten Sie "ContentLength" als die Länge des *** -Anforderungsinhalts *** in Bytes festlegen. –

Verwandte Themen