2017-08-01 8 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だけを残してください(その場合は0になります)、または何らかの要求コンテンツを送信し、送信する要求コンテンツの長さにContentLengthを設定してください。 uriはリクエストの内容ではありません。

+0

リクエスト全体の長さを取得するにはどうすればよいですか? –

+0

'ContentLength'はリクエスト全体の長さではありません。 ***リクエストコンテンツ***の長さです。そして、あなたは***リクエストの内容***を送信しているようには見えません。したがって、 'ContentLength'をゼロのままにしておきます。リクエストコンテンツ***を送信している場合は、ContentLengthを***リクエストコンテンツの長さ(バイト)に設定する必要があります。 –

関連する問題