2011-04-27 8 views
0

Je rencontre des problèmes pour obtenir une méthode HTTP PUT qui fonctionne avec une base de données créée par Couchdb. Rien d'effrayant sur le code, vous l'avez tous déjà vu, donc ne le postez pas, car c'est trop ennuyeux. Message d'erreur lors de l'utilisation d'une méthode put est la connexion est fermée. Y at-il quelque chose que je devrais être au courant de .... quelque chose de vraiment noddy. Je reçois un 404 lorsque j'utilise une méthode POST qui est correcte dans le contexte de la création d'une nouvelle base de données avec Couchdb. Toute aide très appréciée. HTTPWebRequest peut-il faire une méthode PUT? Si ce n'est pas possible, je suis déconcertée de savoir pourquoi. Plus spécifique: l'erreur est la suivante: La connexion sous-jacente a été fermée: La connexion a été fermée de façon inattendue.Couchdb .... HttpWebRequest

J'ai vérifié Couchdb avec CURL ... et cela fonctionne très bien.

erreur est à ce point ... après avoir défini la méthode pour "PUT"

Stream requestStream = httpWebRequest.GetRequestStream(); 

extrait de code:

private string DataViaHTTP(string url, Dictionary<string, string> parameters, string content, string contentType, int timeout, bool contentIsParam, string method) 
{ 
    byte[] requestData; 
    try 
    { 
     HttpWebRequest httpWebRequest; 

     if (contentIsParam == false) 
     { 
      requestData = System.Text.Encoding.ASCII.GetBytes(content); 
      httpWebRequest = (HttpWebRequest)WebRequest.Create(BuildParamString(url, parameters)); 
     } 
     else 
     { 
      requestData = System.Text.Encoding.ASCII.GetBytes(BuildParamString(null, parameters)); 
      httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
     } 

     httpWebRequest.Method = method; 
     httpWebRequest.ContentType = contentType; 

     if (timeout > 0) 
     { 
      httpWebRequest.Timeout = timeout; 
     } 

     httpWebRequest.ContentLength = requestData.Length; 
     Stream requestStream = httpWebRequest.GetRequestStream(); 
     requestStream.Write(requestData, 0, requestData.Length); 
     requestStream.Close(); 

     // Read and return the response stream 
     HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 

     Stream outStream = httpWebResponse.GetResponseStream(); 


     var stringStream = String.Empty; 
     using (StreamReader streamReader = new StreamReader(outStream)) 
     { 
      stringStream = streamReader.ReadToEnd(); 

     } 

     return stringStream; 
    } 
    catch (WebException e) 
    { 
     throw e; 
    } 
    catch (Exception e) 
    { 

     throw e; 
    } 
} 

cela ne fonctionne pas non plus :(

public string PutCommand(string url) 
{ 
    try 
    { 
     using (WebClient webclient = new WebClient()) 
     { 
      webclient.Headers["User-Agent"] = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5"; 
      webclient.Encoding = System.Text.Encoding.ASCII; 
      var x = webclient.UploadData(url, "PUT", new byte[] {}); 
      return System.Text.Encoding.ASCII.GetString(x); 
     } 
    } 
    catch (Exception e) 
    { 
     throw e; 
    } 
} 
+1

Même si le code est ennuyeux, l'erreur doit être là-dedans. – Femaref

+0

Je souhaite ...... :( – WeNeedAnswers

+0

C'est le même code que j'ai utilisé pendant des années avec à la fois GET ET POST – WeNeedAnswers

Répondre

1

Je sais que ce n'est pas une solution au problème, mais y at-il une raison pour laquelle vous ne pouvez pas utiliser la classe System.Net.WebClient si vous je veux juste saisir des données d'une URL? Cela éliminerait beaucoup du code encombré que vous avez écrit. Vous pouvez littéralement l'utiliser avec une seule ligne, comme ceci:

string data = new WebClient().DownloadString(@"http://whateverURL.com/?options=1&somethingElse=5"); 
+0

Je ne l'ai utilisé que pour de simples données, peut-il faire des commandes POST et PUT ou est-ce juste? – WeNeedAnswers

+0

Lire la page MSDN que j'ai liée à ... la méthode 'UploadString()' peut effectuer des POSTES HTTP – qJake

+0

vient de le faire, merci @SpikeX.S'il vérifie.Si il résout le dilemme actuel abandonnera l'ancien code et branchez les trucs webClient – WeNeedAnswers