2011-02-28 43 views
40

¿Cuál es la mejor manera de redactar una solicitud PUT de descanso en C#?¿Cómo hacer una solicitud HTTP PUT?

La solicitud también debe enviar un objeto no presente en el URI.

+3

PUT es HTTP. REST es una arquitectura, no un protocolo. –

+0

sí, pero en esta pregunta en particular estoy usando http en un escenario específico, es decir, el resto ... – Marcom

Respuesta

45
using(var client = new System.Net.WebClient()) { 
    client.UploadData(address,"PUT",data); 
} 
+0

He utilizado un enfoque ligeramente diferente, pero esto funcionó muy bien. Gracias – Marcom

+2

Mente explicando cómo agregar un encabezado oauth a esto? –

+3

@toing_toing agrega encabezados a través de 'client.Headers.Add (...);'. En cuanto a lo que debe ser el nombre/valor, tendrás que investigar eso tú mismo –

27

Mi Final Approach:

public void PutObject(string postUrl, object payload) 
     { 
      var request = (HttpWebRequest)WebRequest.Create(postUrl); 
      request.Method = "PUT"; 
      request.ContentType = "application/xml"; 
      if (payload !=null) 
      { 
       request.ContentLength = Size(payload); 
       Stream dataStream = request.GetRequestStream(); 
       Serialize(dataStream,payload); 
       dataStream.Close(); 
      } 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      string returnString = response.StatusCode.ToString(); 
     } 

public void Serialize(Stream output, object input) 
      { 
       var ser = new DataContractSerializer(input.GetType()); 
       ser.WriteObject(output, input); 
      } 
1

protected void UpdateButton_Click(object sender, EventArgs e) 
     { 
      var values = string.Format("Name={0}&Family={1}&Id={2}", NameToUpdateTextBox.Text, FamilyToUpdateTextBox.Text, IdToUpdateTextBox.Text); 
      var bytes = Encoding.ASCII.GetBytes(values); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(string.Format("http://localhost:51436/api/employees")); 
      request.Method = "PUT"; 
      request.ContentType = "application/x-www-form-urlencoded"; 
      using (var requestStream = request.GetRequestStream()) 
      { 
       requestStream.Write(bytes, 0, bytes.Length); 
      } 
      var response = (HttpWebResponse) request.GetResponse(); 

      if (response.StatusCode == HttpStatusCode.OK) 
       UpdateResponseLabel.Text = "Update completed"; 
      else 
       UpdateResponseLabel.Text = "Error in update"; 
     } 
0

Cómo utilizar el método PUT utilizando WebRequest.

//JsonResultModel class 
    public class JsonResultModel 
    { 
     public string ErrorMessage { get; set; } 
     public bool IsSuccess { get; set; } 
     public string Results { get; set; } 
    } 
    // HTTP_PUT Function 
    public static JsonResultModel HTTP_PUT(string Url, string Data) 
    { 
     JsonResultModel model = new JsonResultModel(); 
     string Out = String.Empty; 
     string Error = String.Empty; 
     System.Net.WebRequest req = System.Net.WebRequest.Create(Url); 

     try 
     { 
      req.Method = "PUT"; 
      req.Timeout = 100000; 
      req.ContentType = "application/json"; 
      byte[] sentData = Encoding.UTF8.GetBytes(Data); 
      req.ContentLength = sentData.Length; 

      using (System.IO.Stream sendStream = req.GetRequestStream()) 
      { 
       sendStream.Write(sentData, 0, sentData.Length); 
       sendStream.Close(); 

      } 

      System.Net.WebResponse res = req.GetResponse(); 
      System.IO.Stream ReceiveStream = res.GetResponseStream(); 
      using (System.IO.StreamReader sr = new 
      System.IO.StreamReader(ReceiveStream, Encoding.UTF8)) 
      { 

       Char[] read = new Char[256]; 
       int count = sr.Read(read, 0, 256); 

       while (count > 0) 
       { 
        String str = new String(read, 0, count); 
        Out += str; 
        count = sr.Read(read, 0, 256); 
       } 
      } 
     } 
     catch (ArgumentException ex) 
     { 
      Error = string.Format("HTTP_ERROR :: The second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close' :: {0}", ex.Message); 
     } 
     catch (WebException ex) 
     { 
      Error = string.Format("HTTP_ERROR :: WebException raised! :: {0}", ex.Message); 
     } 
     catch (Exception ex) 
     { 
      Error = string.Format("HTTP_ERROR :: Exception raised! :: {0}", ex.Message); 
     } 

     model.Results = Out; 
     model.ErrorMessage = Error; 
     if (!string.IsNullOrWhiteSpace(Out)) 
     { 
      model.IsSuccess = true; 
     } 
     return model; 
    } 
Cuestiones relacionadas